【发布时间】:2018-09-13 20:23:22
【问题描述】:
您好,我在使用 C# 时遇到了这个非常奇怪的问题。
我正在尝试做模运算:
double stepSize = 3.6;
if (180.0 % stepSize != 0) DoStuff();
还有 180.0 % 3.6 = 0 -> "proof"
但由于某种原因 C# 返回:3.6
有人解释一下吗
【问题讨论】:
-
3.6无法准确表示。最接近的double的十进制表示为3.6000000000000001,略大一些。结果,有一个显着的非零余数。请注意1800.0 % 36.0 == 0.0-- 小整数可以精确表示,即使在浮点计算中也是如此。