Nếu tôi đã biểu thức sau đây:Implicit chuyển đổi/thúc đẩy float hay double trong các biểu thức giữa C# và 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
tôi nhận thấy rằng Java mất độ chính xác từ X nơi 338,1 là ngầm đôi khi C# hầu như không . Tôi không hiểu tại sao vì 338.1 bằng bằng float và gấp đôi. Chỉ có một chữ số sau dấu chấm.
338.1 KHÔNG giống hệt nhau trong float và double. Việc mở rộng nhị phân chính xác của 338.1 lặp đi lặp lại mãi mãi, vì vậy khi được biểu diễn dưới dạng gấp đôi, nó có nhiều chữ số khác 0 khi được biểu diễn dưới dạng float. –
vui lòng đọc http://csharpindepth.com/Articles/General/FloatingPoint.aspx – Rohit