手动解析double时避免舍入错误

Avoid rounding error when manually parsing double

我想为双精度值实现一个简单的解析器(只是为了好玩)。但是,我注意到在处理十进制移位时,将值乘以 10 的幂时出现舍入错误。

我想知道 double.Parse 如何确保结果值尽可能接近字符串值?

举个例子: 解析 0.0124 (=124*0.0001) 时,我得到 0.012400000000000001。但是,double.Parse 按预期显示 0.0124。

解决方案似乎很简单: 只是不要乘以小于 1 的值(例如上例中的 0.0001),而是除以 1/x(上例中的 10000)。

我认为原因很简单,整数值具有精确表示(最多 2^53),因此商没有舍入误差(因为因子 < 1)。