【发布时间】:2010-12-10 15:15:05
【问题描述】:
可能是一个简单的问题,但这个计算让我很困扰..为什么double test = 57.05 - 57 等于 0.049999999999997158 而不是 0.05?我应该使用哪种数据类型来获得正确的结果?
【问题讨论】:
-
但从工程的角度来看,这是0.000000000005%的误差,应该足够接近。
标签: c#
可能是一个简单的问题,但这个计算让我很困扰..为什么double test = 57.05 - 57 等于 0.049999999999997158 而不是 0.05?我应该使用哪种数据类型来获得正确的结果?
【问题讨论】:
标签: c#
使用decimal。并阅读this。
【讨论】:
尝试将 .05 十进制转换为二进制并告诉我你得到了什么结果(提示:这是一个重复值)。
【讨论】:
长答案:Floating Point Representation
简短回答:像 double 这样的类型符合 IEEE 754,它规定了可能在任何地方都有小数点的数据类型(浮点数)。由于计算机本机二进制中的表示,在许多情况下对这些表示的数学运算结果可能只是实际结果的近似值。
【讨论】:
浮点计算不正确。
【讨论】: