C# modulo 给我错误的答案?

C# modulo is giving me the wrong asnwer?

您好,我在使用 C# 时遇到了这个非常奇怪的问题。

我正在尝试进行模运算:

double stepSize = 3.6;
if (180.0 % stepSize != 0) DoStuff();

和 180.0 % 3.6 = 0 -> "proof"

但由于某些原因 C# returns: 3.6

有人对此有解释吗

问题在于 floating-point 算法及其无法精确表示所有十进制数。一个简单的测试揭示了差异:

decimal 类型:

Console.WriteLine(180m % 3.6m); // 0.0

float 类型:

Console.WriteLine(180f % 3.6f); // 4.768372E-06

double 类型:

Console.WriteLine(180d % 3.6d); // 3.6