Zahl aufgerundet stimmt dennoch nicht?

Status
Nicht offen für weitere Antworten.
S

Sup3rm4n

Gast
hallo,

Code:
String information   =  "Warum werden immer alle Zeilen -1 Zeile ausgegeben? Ich weiß nicht warum, aber es fehlt immer 1 Zeile am Ende die nicht mit ausgegeben wird egal was ich mache. Probiert es bitte selbst aus es ist wirklich komisch. Denn ich runde ja auf tja was kann ich da nur tun?";
		

int zeilenLaenge = 60 ; 
int anzahlZeilen = (int)Math.ceil(information.length() / zeilenLaenge);
System.out.println("Number of Lines: " + anzahlZeilen + " " + "Number of Chars totally: " + information.length());


Warum bekomme ich bei einer Textlänge von 264 Zeichen nur 4 Zeilen raus anstatt 5 bzw. 4 Rest 24 (264/60) ergibt ja 5 aufgerundet nicht ???:L
 

Marco13

Top Contributor
int anzahlZeilen = (int)Math.ceil( information.length() / zeilenLaenge);

Dort teilst du einen int durch einen int - der Nachkommaanteil wird ageschnitten. Sieht man auch bei
int a = 3 / 4; // Jetzt ist a == 0 !!!

So müßt's gehen:
int anzahlZeilen = (int)Math.ceil( (float)information.length() / zeilenLaenge);
 
G

Guest

Gast
Die Verwendung von float sollte man so gut es geht vermeiden. Versuch es mal so:

Code:
int zeilenLaenge = 60 ; 
int anzahlZeilen = (information.length() + zeilenlaenge - 1 ) / zeilenLaenge;

Fred
 
S

Sup3rm4n

Gast
Anonymous hat gesagt.:
Die Verwendung von float sollte man so gut es geht vermeiden. Versuch es mal so:

Code:
int zeilenLaenge = 60 ; 
int anzahlZeilen = (information.length() + zeilenlaenge - 1 ) / zeilenLaenge;

Fred

Das ergibt keinen Sinn was du da schreibst mit "+" , der Tip mit float geht, danke dirr!
 

Ralf W. Balz

Mitglied
Hi,

warum Math.ceil() nicht aufrundet liegt daran, dass du einen integer durch einen integer teilst,
das Ergebnis ist auch ein integer, diesen kannst du zwar aufrunden aber ohne Effekt und
Fehlermeldung, weil eine ganze Zahl nicht aufgerundet wird und es auch kein Fehler
ist eine ganze Zahl aufzurunden.

Der Unterschied ist der, dass du bei der 1. Zeile auch eine Nachkommastelle hast die
aufgerundet werden kann, oder auch nicht falls die Rechnung aufgeht ohne Rest.


Code:
int z1 = (int)Math.ceil((float)264 / 60);
int z2 = (int)Math.ceil(264 / 60);
int z3 = (int)Math.ceil((float)240 / 60);

System.out.println(z1 + " " + z2 + " " + z3);

Grüße Ralf
 
S

Sup3rm4n

Gast
Anonymous hat gesagt.:
Die Verwendung von float sollte man so gut es geht vermeiden. Versuch es mal so:

Code:
int zeilenLaenge = 60 ; 
int anzahlZeilen = (information.length() + zeilenlaenge - 1 ) / zeilenLaenge;

Fred
ups...

habe das "/zeilenLaenge" als Kommentar gelesen :bae:
 
S

Sup3rm4n

Gast
Code:
public static void main(String[] args)
	{		
		i

		String  information = "Ist die Welt den  überhaupt denn wahr sein oder ist das verarsche? Ich bin mir sicher der Fernsehr ist nicht verschwunden oder verloren gegangen, sondern die Monitore wurden letztes mal in die Hand genommen als er mich arsch nannte...hahahahah hätte er wenigstens arschloch gesagt doch so ist es ein Beleidigung und Mobbing zugleich..."; 
             int zeilenLaenge =  50;  
	     int anzahlZeilen = (int)Math.ceil((float)information.length() / zeilenLaenge);
			    
	     String[] outputArray = new String[anzahlZeilen];
	
	     int start = 0; 
	     int end = zeilenLaenge; 
	     System.out.println("Zeilen insgesamt: " + anzahlZeilen + "   Zeichen insgesamt: " +  information.length());    
	      
               for( int i = 0 ; i < outputArray.length ; i++) 
	      {  
	    	
	    	 String zeilenInhalt =  information.substring(start,end);	    	 
	         outputArray[i] = zeilenInhalt;		         
	         System.out.println(outputArray[i]); 
	         end  =  end + zeilenLaenge; 
	         start =  end -  zeilenLaenge;	         
	      }			     
		
	}

}

FehlerCode:
Code:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 350
	at java.lang.String.substring(Unknown Source)

Irgendwas stimmt mit dem String.substring nicht und deren Werten ich komme aber nicht drauf. Dachte mir schon dass der substring wert wenn er das letzte mal in der schleife aufgerufen wird evtl zu groß ist und somit keinen text erfasst, wenn die letzte Zeile keine volle 50 Zeichen hat.
 
S

Sup3rm4n

Gast
Code:
System.out.println("Zeilelänge: " + zeilenlänge);
	        if(end > zeilenlänge)
	        {
	        	end = zeilenlänge;
	        	
	        }	
	        else
	        {
	        	
	        }

ok habs schon ;-)
 

ARadauer

Top Contributor
darüber könnte man wirklich streiten.

float ist natürlich ein erheblicher mehraufwand für den prozessor. aber ich werde auf einem 3 ghc rechner, bei dem die bottelnecks sicherlich bei der festplatte oder im netzwerk liegen, sicher keine formeln umschreiben damit ich keine float brauche. und mir da irgendwo eine ns spare

optimieren nur wos sinn macht, wenn ich ein j2me programm habe, dann lass ichs mir einreden. aber desktop? ???:L
 
S

SlaterB

Gast
der Hinweis macht schon deshalb Sinn,
um float hier im Forum nicht zu verbreiten,

keiner meckert über alte Formeln aber wenn man hier neue schreibt, dann doch bitte ohne

(ob nun float überhaupt so schlimm ist will ich nicht beurteilen)
 

Marco13

Top Contributor
Vielleicht hätte ich das " :?: :!: ???:L :bahnhof: " etwas präziser formulieren sollen: Was spricht gegen float? Sowas wie

int x = Math.ceil(size / 10.0f);

liest doch doch wohl besser (und ist leichter versändlich) als

int x = (size + 10 - 1) / 10;

Man könnte (wenn man es drauf anlegen würde) ja float "fast immer" vermeiden, aber wie groß sollen die Verrenkungen dafür denn sein? Welcher Anlaß besteht denn dafür?
 
G

Guest

Gast
Marco13 hat gesagt.:
Anonymous hat gesagt.:
Die Verwendung von float sollte man so gut es geht vermeiden.
:?: :!: ???:L :bahnhof:
Nicht wegen Performance, sondern weger der auftretenden Ungenauigkeiten.

information.length() ist ein int. Wenn man den auf float castet, gibt es schon Rundungsfehler, weil nicht jeder int in einen float passt.

Nimm als Beispiel den Wert 19999981 für information.length(). Mein Taschenrechner sagt mir:

19 999 981 / 60 = 333 333.017

Aufgerundet sollte das also 333 334 ergeben. Folgendes Programm zeigt, dass man kein float verwenden sollte:

Code:
int informationlength = 19999981;
int zeilenLaenge = 60;

int mitInt = (informationlength + zeilenLaenge - 1) / zeilenLaenge;
int mitFloat = (int)Math.ceil((float)informationlength / zeilenLaenge);

System.out.println("  int: " + mitInt);
System.out.println("float: " + mitFloat);



// Ausgabe:

  int: 333334
float: 333333

Fred
 

Marco13

Top Contributor
Nun - man könnte jetzt sagen, dass Math ja sowieso überall double verwendet, und man deswegen auch gleich nach double casten kann - wäre das dann OK? Ja, vielleicht... aber wenn man dann einen long als Eingabe hat.... :roll:

Man hat IMMER mit beschränkter Genauigkeit zu kämpfen - man muß sich halt im klaren sein, wo die auftreten kann...
Code:
class FloatTest
{

    public static void main(String args[])
    {
		test(19999981);
		test(2147483647);
    }

    private static void test(int informationlength)
    {
		System.out.println("Input : "+informationlength);
		int zeilenLaenge = 60;
		int mitInt = (informationlength + zeilenLaenge - 1) / zeilenLaenge;
		int mitFloat = (int)Math.ceil((float)informationlength / zeilenLaenge);
		int mitDouble = (int)Math.ceil((double)informationlength / zeilenLaenge);
		System.out.println("   int: " + mitInt);
		System.out.println(" float: " + mitFloat);
		System.out.println("double: " + mitDouble);
	}
}

Ausgabe:
Input : 19999981
int: 333334
float: 333333
double: 333334
Input : 2147483647
int: -35791393 Hoppla :shock:
float: 35791396
double: 35791395

Aber grundsätzlich akzeptiere ich das mal als Argument - Aber nur für diesen speziellen Fall. Einige Antworten klangen, als sei float grundsätzlich falsch und böse. Es kommt eben auf den Zusammenhang an...
 
G

Guest

Gast
Marco13 hat gesagt.:
Nun - man könnte jetzt sagen, dass Math ja sowieso überall double verwendet, und man deswegen auch gleich nach double casten kann - wäre das dann OK?
Wenn die Ausgangswerte vom Typ int sind kann man ruhigen Gewissens mit double rechnen, da jeder int ohne Verlust nach double gecastet werden kann. Trotzdem finde ich die Lösung irgendwie unschön, weil einen das double-Ergebnis mit den ganzen Nachkommastellen ja gar nicht interessiert, sondern die GANZZAHLIGE Lösung. Daher finde ich es auch logisch, ausschließlich mit Ganzzahlen zu rechnen.

Marco13 hat gesagt.:
Ja, vielleicht... aber wenn man dann einen long als Eingabe hat.... :roll:
Dann wird double für große long-Werte nicht mehr funktionieren, da long 64 Bit Genauigkeit hat und double nur 53 Bit.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
B 49-bit-zahl mit genau 6 Einsen bauen? Java Basics - Anfänger-Themen 21
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
M zahl raten Java Basics - Anfänger-Themen 1
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
I Zahl aufrunden (Zeit) Java Basics - Anfänger-Themen 43
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
R Fortlaufende Zahl Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
HelpInneed Zahl. Java Basics - Anfänger-Themen 2
R Perfekte Zahl Java Basics - Anfänger-Themen 8
D Mittlerste Zahl Java Basics - Anfänger-Themen 17
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
J Verdoppeln einer Zahl (in dem Fall Münzen) Java Basics - Anfänger-Themen 4
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
K Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab? Java Basics - Anfänger-Themen 9
T Zahl in Array ersetzen Java Basics - Anfänger-Themen 2
Abraham42 Prozentsatz einer Zahl mehrmals Java Basics - Anfänger-Themen 2
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
S Zahl eingeben Java Basics - Anfänger-Themen 8
A Java . punkt neben einer Zahl. Java Basics - Anfänger-Themen 1
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
J Die größte Zahl anzeigen Java Basics - Anfänger-Themen 19
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
L Erhöhung der Zahl Java Basics - Anfänger-Themen 3
F Negative Zahl erzwingen Java Basics - Anfänger-Themen 3
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
T Eulersche Zahl e Java Basics - Anfänger-Themen 5
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G Programm schreiben: Zahl (n) eingeben, 1+1/n+2/n+3/n+....+n/n Java Basics - Anfänger-Themen 8
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
A Gewürfelte Zahl ausgeben Java Basics - Anfänger-Themen 10
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
O Markoff-Zahl Java Basics - Anfänger-Themen 22
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
L 10-Stellige Zahl hochzählen lassen Java Basics - Anfänger-Themen 1
H String und Zahl Java Basics - Anfänger-Themen 10
R Zahl 1 bis 100 erraten Java Basics - Anfänger-Themen 12
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
H Würfelspiel, stop bei gleicher Zahl Java Basics - Anfänger-Themen 4
B Array - die Häufigkeit der Zahl zählen Java Basics - Anfänger-Themen 9
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
I Eulersche Zahl Java Basics - Anfänger-Themen 6
F Produkt d. Ziffern einer Zahl..?! Java Basics - Anfänger-Themen 5
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
A Rechnen mit Text und Zahl Java Basics - Anfänger-Themen 4
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
C Erste Ziffer einer Zahl Java Basics - Anfänger-Themen 46
M Zeilenumbruch ab der 10. Zahl Java Basics - Anfänger-Themen 11
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
R Input/Output zahl aus showInputDialog() Java Basics - Anfänger-Themen 25
D Die Zahl in der Mitte finden Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben