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
achso ^^ du wolltest doch noch wissen was ich mit ausnhamen meine.

nur zum bleistift dass hinter die 3,9 jetzt n F muss usw ^^, fällt wahrscheinlich einem der nut mit java schafft nicht auf.

Mir als alter basicer fällt es doch sehr schwer sich durch die unendlichen weiten des java zu wühlen .



( ui das hab ich aber schön gesagt ^^)
 
S

SlaterB

Gast
float ist eh ein Sonderding,
bleib bei double, dann kann das f weg (allerdings muss dann ein d dran ;),
sonst wird manchmal int / int = int gerechnet und automatisch gerundet, 3 / 2 = 1)
 

The_S

Top Contributor
Auch das hat seinen Sinn! Dadurch wird verhindert, dass du nicht versehentlich Daten verlierst. Angenommen du würdest eine Kommazahl zu einer Ganzzahl hinzuzählen, wäre ja die logische Konsequenz, dass die Kommazahl auch zur Ganzzahl wird und deshalb die Nachkommastellen verliert. Der Compiler macht dich somit darauf aufmerksam, dass es hier zu Datenverlust kommen könnte. Und da ein double mehr Nachkommastellen als ein float haben kann, kann es auch hier zu Datenverlust kommen.

Deshalb musst du in solchen Situationen explizit angeben, dass du auch wirklich diesen Datentyp meinst. Normalerweiße macht man das durch casten. Aber bei Float, Double und Long ist es mögliche eine Kurzform zu verwenden.

Macht also alles Sinn und ist keineswegs eine Ausnahme.
 

Saxony

Top Contributor
Hiho,

zudem habe ich schon 2 Seiten weiter vorne eine Lösung zum runden auf zwei stellen geposted. ;)

Und meine Hinweise zum Sexagesimalsystem hat auch niemand beachtet. :lol:

bye Saxony
 

Marco13

Top Contributor
ms hat gesagt.:
@Marco13
Was soll den deiner Meinung nach verwendet werden, wenn nicht BigDecimal?

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

ms

Die Problematik ist mir sehr bewußt. Aber die Antwort ist einfach: Für das, was 90% aller Programmier machen, und woraus 95% des Quellcodes besehen, reicht float oder double. Mir würden aus Ausnahmen nur Finanzinstitute einfallen (die allerdings wohl eher COBOL als Java verwenden, und solche Probleme vmtl. eher mit Binary Coded Digits lösen würden), oder heikle wissenschaftliche Berechnungen, die aber (wenn es nicht gerade nur um einen Taschenrechner geht) "oft" zeitrkitisch sind, und BigDecimal ist SO ineffizient, dass sich jeder, der sowas braucht, C++ verwenden oder sich dafür eine eigene Klasse schreiben oder sich zumindest auf andere (effizientere) Bibliotheken stützen würden.


Saxony hat gesagt.:
Hiho,
Code:
String s = "string";

// ist das selbe wie

String s = new String("string");
Das ist nichtmal das gleiche :wink: Beim ersten wird ein String aus dem internen pool verwendet, beim zweiten wird explizit eine neue String-Instanz erstellt.
 

Saxony

Top Contributor
Schon klar , nur für mich als Entwickler ergeben sich in der weiteren Verwendung von s keine Unterschiede.

Zudem sollte es auch nur zeigen, dass String somit eine Klasse ist, da man davon Instanzen mittels new erzeugen kann.

bye Saxony
 

ms

Top Contributor
Ich habe in den letzten Projekten eigentlich immer BigDecimal verwendet einfach nur um dieser Problematik aus dem Weg zu gehen. Dabei ging es nichtmal um hochwissenschaftliche Berechnungen sondern um ganz simple Preisdaten und einfache Berechnungen.

Wenn schon nicht jeder Entwickler diese Problematik intus hat, wie soll man dass dann einem aus der Fachabteilung erklären warum 24.4 + 3.9 nicht wie erwartet 28.3, sondern 28.299999999999997 ist. Wenn man dann versucht das Problem zu erklären muss man zwangsläufig technisch werden. Und da steigt ein nicht-Techniker meistens aus. Eigentlich interessiert es ihn auch gar nicht. Darum ist es auch, wie ich finde, legitim, für jede sch... Berechnung BigDecimal zu verwenden. Das sind zumindest meine Erfahrungen.

ms
 

Wildcard

Top Contributor
Wenn du so an die Sache rangehst, das du Zahlen zur Berechnung verwendest die um viele Faktoren langsamer sind und ein vielfaches an Speicher fressen, nur um zu vermeiden ein wenig denken zu müssen, braucht man sich nicht wundern wenn Java oft als langsam verschrien wird.
 

Saxony

Top Contributor
Wildcard hat gesagt.:
Wenn du so an die Sache rangehst, das du Zahlen zur Berechnung verwendest die um viele Faktoren langsamer sind und ein vielfaches an Speicher fressen, nur um zu vermeiden ein wenig denken zu müssen, braucht man sich nicht wundern wenn Java oft als langsam verschrien wird.

Richtig.

Und was spricht bitte gegen das Runden von primitiven Gleikommezahlen?

Vor allem im finanztechnischen Bereich reicht für die ANZEIGE meist eine Rundung auf 2-4 Nachkommastellen. Weil sich niemand in einer Tabelle solche Werte anguggen will: 2,45454545 EUR. :D

Da reicht 2,45 für die Anzeige, aber halt intern nicht vergessen weiterhin mit 2,45454545 zu rechnen.

Wie schon mal in einem anderen Thread erwähnt, habe ich ja für die VersicherungskammerBayern an einer Gebäudeversicherungssoftware mitgearbeitet.
Dort war der Tarifrechner aber so komplex (im Pflichtenheft eine Berechnung, erklärt auf knapp 300 Seiten :) ), das die Genauigkeit von double nicht mehr ausgereicht hat, da es am Ende zu Differenzen im 1/10 Cent Bereich kam. Hier war also die Verwendung von BigDecimal Pflicht.

bye Saxony
 

Tobias

Top Contributor
Mh, das Problem hatte ich mit einer ganz simplen Preis-Addition in einem Online-Shop auch schon mal... Da habe ich auch mit double gearbeitet und nur für die Anzeige gerundet und am Ende hatte ich eine Differenz von einem Cent. Weiß die Details nicht mehr (bin schon lange raus aus der Firma), aber das war eine ziemliche Scheiße ;).
Ende vom Lied war: Keine Zeit, kein Budget - nimm BigDecimal und machs fertig ...

mpG
Tobias
 

Saxony

Top Contributor
Hiho,

kann man eigentlich nicht auch nen long für vor dem Komma und einmal long für nach dem Komma nehmen ?

bye Saxony
 
S

SlaterB

Gast
oder nur ein long und immer berücksichtigen, dass die letzten beiden Ziffern nach dem Komma stehen,
also in ganzen Cents rechnen
 

ms

Top Contributor
Wildcard hat gesagt.:
Wenn du so an die Sache rangehst, das du Zahlen zur Berechnung verwendest die um viele Faktoren langsamer sind und ein vielfaches an Speicher fressen, nur um zu vermeiden ein wenig denken zu müssen, braucht man sich nicht wundern wenn Java oft als langsam verschrien wird.
In diesem Fall hat das niemanden interessiert.

Tobias hat gesagt.:
Ende vom Lied war: Keine Zeit, kein Budget - nimm BigDecimal und machs fertig ...
So wie es aussieht bin ich nicht der einzige dem es so geht. :(

ms
 
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
I Push Nachrichten von JAVA EE App an Mobile App 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

Ähnliche Java Themen

Neue Themen


Oben