我刚注意到在C#中,如果我乘以Math.Pow加倍,结果就不对了。简单的测试可以通过以下方式完成:
70883187.82 * Math.Pow(10, 2)
返回7088318781.999999
或者double c = 70883187.82 * 100
背后的解释是什么?
由于
答案 0 :(得分:0)
如果您需要这种精确度,则应使用decimal
而不是双精度。由于它们在内存中的表示方式,double无法以精确的级别存储精确值。
double中的每个小数位都计算为1 /(2 ^ i),因此有许多值无法合法地用float或double值表示。