我的問題,簡而言之,爲什麼浮點數的舍入誤差只會在計算後顯示出來,而不是存儲文字?將十進制浮點數轉換爲二進制並返回
我的意思是這個 - 我知道由於從十進制轉換爲二進制和返回時浮動四捨五入誤差引起的問題。
例如,在Java中:然後
double a = 10.567;
double b = 2.16;
double c = a * b;
C存儲,而不是22.82472值22.824720000000003。
這是因爲結果22.82472不能準確地存儲在雙精度型的有限二進制數字中。 然而,10.567和2.16(即a和b)都不是。
但是,如果我打印的a和b的值,他們打印出來,沒有任何舍入誤差。爲什麼舍入錯誤不會顯示在這裏?
這是否意味着浮點文字的表示與浮點計算結果的表示有某種不同?
它的輸出格式化。例如。在C#中''c.ToString()'''c.ToString(「R」)'(''R''強制.Net返回所有位而沒有任何向上取整)時將返回'22.82472''將返回'22.824720000000003' –
@DmitryBychenko我嘗試使用Java格式化c作爲String,它仍然返回22.824720000000003。 –