Wenn ich den folgenden Ausdruck:Implizite Konvertierung/Förderung von float oder double in Ausdrücken zwischen C# und Java
byte A = 69;
int B = 123;
long C =;
float D = 4.9f;
double E = 11.11;
double X = (B * 100) + 338.1 - (E/B)/C;
double X1 = (B * 100) + (A * D) - (E/B)/C;
// JAVA - lost precision
System.out.println(X); // 12638.099971861307
System.out.println(X1); // 12638.099581236307
// C# - almost the same
Console.WriteLine(X); // 12638.0999718613
Console.WriteLine(X1) // 12638.0999784417
Ich bemerkte, dass Java verliert Präzision von X, wobei 338,1 implizite doppelt so hoch ist, während C# macht fast nicht . Ich verstehe nicht warum, denn 338.1 ist gleich float und double. Nach dem Punkt gibt es nur eine Ziffer.
338.1 ist nicht identisch in float und double. Die exakte binäre Expansion von 338.1 wiederholt sich für immer, also wenn sie als ein Doppelwort ausgedrückt wird, hat sie eine ganze Menge mehr Nicht-Null-Stellen als wenn sie als Float ausgedrückt wird. –
lesen Sie bitte http://csharpindepth.com/Articles/General/FloatingPoint.aspx – Rohit