双倍乘以100或Math.Pow不完全正确

时间:2018-03-20 00:15:22

标签: c# rounding precision

我刚注意到在C#中,如果我乘以Math.Pow加倍,结果就不对了。简单的测试可以通过以下方式完成:

70883187.82 * Math.Pow(10, 2)

返回7088318781.999999

或者double c = 70883187.82 * 100

也可以

背后的解释是什么?

由于

1 个答案:

答案 0 :(得分:0)

如果您需要这种精确度,则应使用decimal而不是双精度。由于它们在内存中的表示方式,double无法以精确的级别存储精确值。

double中的每个小数位都计算为1 /(2 ^ i),因此有许多值无法合法地用float或double值表示。