Großer Java bug beim rechnen?

Status
Nicht offen für weitere Antworten.
B

Bug?

Gast
Also entweder ich kann nicht mehr rechnen oder java kanns nicht :D

hier mein code:

(testet vorher mal mit nem taschenrechner was rauskommt^^)
Code:
public class test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	double lol ;
	lol=16.6;
	lol=lol+3.9;
	lol=lol+3.9;
	lol=lol+3.9;
	System.out.print(lol);
	

	}

}



Beim normalen Taschenrecher kommt 28,3 raus was ja auch richtig ist. nur das java progrmam zeigt mir ne Periodische Zahl an. Bug oder?
 
G

Gast

Gast
wie meinst du das genau?
also bei einem "externen" taschen rechner kommt 28,3 raus ( kopf sagt das auch ^^)

aber bei dem programm kommt: 28.299999999999997 raus
 
G

Gast

Gast
also mir kommt das ganze ziemlich komisch vor.
zu genau rechnen geht eigentlich nicht. das muss eigentlich schon n java bug sein. ich hab das ganze grad mal in basic probiert. da rechnet der alles ohne fehler ( qbasic und vb.net)
 
G

Gast

Gast
das interesannte ist dass wenn man die 3*3.9 zusammenfast auf 11,7 und das mit 16,6 addiert kommt das richtige ergebniss raus.

Das ist mal voll strange
 
S

SlaterB

Gast
ein Computer hat Probleme, bestimmte Zahlen als Bits und Bytes darzustellen,
genau wie im Zehnersystem 1/3 = 0.333333 schwer darzustellen ist
das ist kein Bug, sondern ein generelles Problem von Computern,

natürlich ist es auch möglich, genau zu rechnen, wenn man nur genug Speicher bereitsstellt, BigDecimal z.B.,
double ist aber ein optimiertes kleines Format mit dem Nachteil der Ungenauigkeit
 

Marco13

Top Contributor
SlaterB hat gesagt.:
natürlich ist es auch möglich, genau zu rechnen, wenn man nur genug Speicher bereitsstellt, BigDecimal z.B.,
Grundsätzlich widerspreche ich da jetzt nicht. Dass "genug Speicher" bei periodischen Zahlen (bzw. spätestens bei irrationalen Zahlen wie PI) gleichbedeutend ist mit "unendlich viel Speicher" macht das ganze aber etwas problematisch.

Ich persönlich finde BigDecimal übrigens extrem häßlich, und man sollte IMHO einen Anfänger nicht dazu verleiten, jeden Sch.... Kleinkram mit BigDecimal zu rechnen. Es gibt IMHO nur SEHR wenige sinnvolle Anwendungsgebiete für diese Klasse. (Im Moment fallen mir GARkeine ein... Und wenn jetzt irgendwas von "Finanzwesen" erzählt wird: Wer für sawas BigDecimal verwendet, ist selbst Schuld...)
 
S

SlaterB

Gast
ich bezog mich jetzt nur auf 16.6+3.9 usw.,
also alles was ein normaler Mensch im Zehnersystem rundungsfehlerfrei hinbekommt ;)

natürlich auch wiederum nicht mit 2 Mil. Nachkommastellen, so dass allein dadurch der Speicher gesprengt wird ;)
 

ms

Top Contributor
@Marco13
Was soll den deiner Meinung nach verwendet werden, wenn nicht BigDecimal?

Hier übrigens ein Beitrag, der die Problematik ein wenig erläutert.

ms
 

The_S

Top Contributor
Marco13 hat gesagt.:
Es gibt IMHO nur SEHR wenige sinnvolle Anwendungsgebiete für diese Klasse. (Im Moment fallen mir GARkeine ein... Und wenn jetzt irgendwas von "Finanzwesen" erzählt wird: Wer für sawas BigDecimal verwendet, ist selbst Schuld...)

Ich hab ma nen (wissenschaftlich angehauchten) Taschenrechner geschrieben, der auch mit etwas größeren Zahlen umgehen kann. Dafür habsch das z. B. gebraucht
 

Wildcard

Top Contributor
Es ist kein Problem von Computern, sondern eine Besonderheit der verwendeten Zahlensysteme.
Es gibt auch Zahlen die sich im Dezimal System nicht mit endlichen Nachkommastellen abbilden lassen, in anderen Zahlensystemen aber sehr wohl.
Man denke nur an 1/3:
0,33333....x10
0,1x3
:wink:
 
G

Gast

Gast
ui ist ja doch recht kompliziert ^^.gibs da jetzt nen einfachen zahlentyp der sicher ist? und wie muss ich den am code anwednden?
 

ms

Top Contributor
Entweder runden oder BigDecimal verwenden.
BigDecimal ist zwar nicht grad sehr handlich, wie Marco schon gesagt hat, dafür gibts aber keine Probleme.

ms
 
G

Gast

Gast
also wenn ich was mit einem computer rechne dann will ichs genau. sonst kann ich auch schätzen ^^
 
G

Gast

Gast
achso und noch ne frage zu BigDecimal wie genau geht das?

ich hab folgendes gemacht:

BigDecimal lol;

aber so gehts nicht?
wie genau muss ich BigDecimal anwenden?
 
G

Guest

Gast
mhh ich schreib doch lieber den code hier rien

Code:
import java.math.BigDecimal;



public class test4 {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	BigDecimal lol ;
	lol=  16.6;
	lol=lol+ 3.9;
	lol=lol+  3.9;
	lol=lol+  3.9;
	System.out.print(String.valueOf(Math.round(lol)));
	

	}

}
 

Wildcard

Top Contributor
Mit der Einstellung kommst du nicht weit.
Schnelle Berechnungen müssen auf vorhandenen Datentypen erfolgen und deren Einschränkungen sollte man kennen (siehe von mir geposteter Link).
Grundlos verwendet niemand andere Datentypen als float oder double, nur wenn es zwingend notwendig ist exakte Ergebnisse zu erhalten, oder mit sehr großen Zahlen umgehen muss, verwendet man Alternativen.
 
G

Gast

Gast
omg bahnhof ^^. ach man mir vergeht die lust an java :(.
alles viel zu kompliziert und überal gibs ne ausnahme ^^.

Mag mir jemand mein code so verbessern dass es geht?
 
G

Gast

Gast
ich will ja nix sagen ^^ aber mein buch :Grundkurs Programmieren in Java Band 1 beinhaltet keine BigDecimal

steht wahrscheinlich in band 2 :D
 

Saxony

Top Contributor
Hiho,

man kann ja auch alle Zahlen vorher in das Sexagesimalsystem umwandeln.
Dieses wurde damals schon von den alten Babyloniern verwendet. Zudem besitzt es eine sehr gute Teilbarkeit.

Verwendet wird es selbst von uns noch -> Uhrzeit, da hiermit besser ("rundere") Zeitangaben möglich sind als mit dem Dezimalsystem.

Wird jeder sehen, wenn er seine Stundenerfassung immer in Dezimalform zurückbekommt.
Aha 8,08333 Stunden gearbeitet. Besser ist dann doch 8h5m :)

Zusätzlich kommt dieses System auch noch in der Positionsbestimmung auf der Erde vor. Longitude und Latitude werden standardmäßig auch in Grad/Stunden°Minuten' und Sekunden" angegeben.

bye Saxony
 

Wildcard

Top Contributor
Gast hat gesagt.:
ich will ja nix sagen ^^ aber mein buch :Grundkurs Programmieren in Java Band 1 beinhaltet keine BigDecimal
Weil du es nicht brauchst und jetzt auch noch nicht verwenden möchtest.
Mit IEEE Zahlen musst du dich übrigens auch bei anderen Programmiersprachen beschäftigen...
 

The_S

Top Contributor
Java programmieren ist eben nicht das selbe wie ne Fernbedienung zu programmieren. Java ist eine High-Level Sprache und deshalb von natur aus komplex, bietet dafür aber auch schon sehr viele Möglichkeiten, um die du dich nicht mehr selbst kümmern musst.

Wenn du keine Lust hast Java zu programmieren, dann lass es. Und wenn du es machen musst, dann bezahl jemanden dafür, dass er es für dich erleidgt. www.rentacoder.com
 
G

Gast

Gast
äähm falsch ^^ ich werde bezahlt um mit java zu programmieren :D

So und jetzt nochmal . Kann mir einer ne " gute " lösung mit quellcode geben?

IEEE hab ich auch noch nie gehört ^^
 
G

Gast

Gast
omg jetzt raff ich blad gar nichts mehr.
Warum ist String ne klasse. ich dachte immer es sei ein Datentyp wie integer und double auch
 
G

Gast

Gast
also die sache ist eigentlich die. ich muss ein kleines verwaltunsprogramm schreiben dass buchungen zusammenzählen kann. das mit dem speichern usw hab ich schon hinbekommen. aber rwenn der "falsch" rechnet bringt mir das ja nix.

Also was ist da jetzt gut geeignet dafür? das BigDecimal oder doch was anderes?
 
S

SlaterB

Gast
die Erde ist rund und String eine Klasse,
was du 'immer dachtest' ist kein Argument

-------

für die Buchungen könntest du auch int/ long verwenden und immer bedenken, dass die letzten beiden Ziffern die Nachkommastellen sind,
bei deinen allgemeinen Fähigkeiten steckt in jedem Verfahren aber Tücken, die dir zu schaffen machen werden
 

The_S

Top Contributor
String hat Methoden, von daher ist String eine Klasse. Zwar eine besondere Klasse (siehe z. B. die Möglichkeit ohne new zu initialisieren), aber eine Klasse!
 

Saxony

Top Contributor
Hiho,

nein String ist eine Klasse, die Java Syntax erlaubt aber mit String ähnlich zu Verfahren wie mit den primitiven Datentypen.

Code:
String s = "string";

// ist das selbe wie

String s = new String("string");

So und damit dein Porgramm auch 28,3 ausgibt mach folgendes:

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

		// TODO Auto-generated method stub
		double lol;
		lol = 16.6;
		lol = lol + 3.9;
		lol = lol + 3.9;
		lol = lol + 3.9;
		System.out.print(new DecimalFormat("#.##").format(lol));
	}

bye Saxony
 

The_S

Top Contributor
Buchungen bestehen aus Geldbeträge und Geldbeträge haben idR 2 Nachkommastellen. Von daher nimmst du ein float und rundest immer mit Math.round auf zwei Stellen nach das Komma. Fertig!
 
G

Guest

Gast
ok und das funktioniert immer? ok danke.

also im prinzip:

Code:
float lol;
l	lol=  16.6;
	lol=lol+ 3.9;
	lol=lol+  3.9;
	lol=lol+  3.9;
System.out.print(String.valueOf(Math.round(lol)));


aber wie genau rund ich da auf 2 stellen?
 

The_S

Top Contributor
N String is ne Außnahme, die kannst du aber auch über new initialisieren. Vondaher keine Ausnahme, sondern es gibt eine Möglichkeit die Initialisierung zu "vereinfachen". IEEE ist auch keine Außnahme sondern eine Tatsache.

Also, wo siehst du jetzt Außnahmen über Außnahmen?
 
G

Gast

Gast
aprop float.

( siehe code den ich vorher gepostet habe)

warum funktioniert das so nicht?

wenn ich "lol" zu float mache kann ich nicht mehr normal addieren!
 

The_S

Top Contributor
Du regst mich was auf ...

Code:
		   float lol ;
		   lol=16.6F;
		   lol=lol+3.9F;
		   lol=lol+3.9F;
		   lol=lol+3.94564F;
		   System.out.println(lol);
		   System.out.print(Math.round(lol * 100) / 100F);

Un jetzt will ich nix mehr hören!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Luk10 Problematik großer Objekt-Erstellung / -Löschung Java Basics - Anfänger-Themen 2
R OutOfmemory Exception bei sehr großer Liste (Tomcat Webservice) Java Basics - Anfänger-Themen 4
Luk10 Vererben großer Interface-Methoden Java Basics - Anfänger-Themen 13
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
D Sehr großer String lässt sich nicht bearbeiten Java Basics - Anfänger-Themen 7
G Vergleich großer Basen/Exponenten? Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben