int a = (int) ((0,7 + 0,1) * 10). Warum a = 7? [Duplikat]

8

Ich habe eine Frage an alle.

%Vor%

Nach der Ausführung dieses Codes ist a = 7. Ich kann nicht verstehen warum, weil (0.7 + 0.1) = 0.8 und 0.8 * 10 = 8. Kann mir jemand sagen warum? Danke!

    
Artyom Gilevich 29.06.2013, 19:29
quelle

3 Antworten

24

Das Problem ist, dass weder 0,1 noch 0,7 genau als double dargestellt werden können:

  • 0.1 wird als ungefähr 0.10000000000000000555 dargestellt.

  • 0.7 wird als ungefähr 0.69999999999999995559 dargestellt.

Ihre Summe ist ungefähr 0.79999999999999993339 . Mit zehn multipliziert und abgeschnitten, ergibt dies 7 .

Was jeder Informatiker über Gleitkommaarithmetik wissen sollte ist ein Ausgezeichnet lesen Sie zu diesem Thema.

    
NPE 29.06.2013 19:31
quelle
5

Es ist float arithmetic, es wird floored.

Was hier passiert ist, dass (0.1 + 0.7) wirklich nahe 0.8 ist, aber es ist nicht wirklich 0.8, wenn du es mit 10 multiplizierst, bekommst du 7.9999 ... Wenn du das durchgehst, bekommst du 7.

    
Benjamin Gruenbaum 29.06.2013 19:31
quelle
3

Der dezimale Teil von int s in Java wird abgeschnitten. Sie können entweder x und y Gleitkommavariablen machen oder sie einfach in float umwandeln und zurückwerfen, um einen int als Endergebnis zu erhalten.

    
Mr D 29.06.2013 19:31
quelle

Tags und Links