2015-07-10 49 views
1

我想爲雙精度值實現一個簡單的解析器(只是爲了好玩)。然而,我注意到,當處理小數點位移時,當乘以10的冪時,我得到了舍入誤差。手動解析雙精度時避免舍入誤差

我想知道double.Parse如何確保結果值儘可能接近字符串值?

只是一個例子: 當解析0.0124(= 124 * 0.0001)時,我得到0.012400000000000001。但是,double.Parse按預期顯示0.0124。

+0

我希望你認識到,在這兩種情況下,它不等於0.0124,但這是一個很好的問題來理解A.什麼是由「double.Parse」和B分析的「真實」價值是什麼 – Amit

+0

當然。 double值以二進制格式存儲。所以很多十進制數字沒有確切的表示。 – LionAM

回答

0

該解決方案看起來很簡單: 只是不乘以小於1的值(例如上例中的0.0001),而是除以1/x(在上例中爲10000)。

我認爲原因很簡單,整數值有一個確切的表示形式(高達2^53),所以商沒有舍入誤差(因爲存在因子< 1)。