C#modulo给我错误的asnwer?

时间:2018-04-04 10:01:56

标签: c# math modulo

嗨,我对C#有这个非常奇怪的问题。

我正在尝试进行modulu操作:

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

180.0%3.6 = 0 - > "proof"

但由于某些原因,C#返回:3.6

是否有人对此有解释

1 个答案:

答案 0 :(得分:3)

问题是浮点算术及其无法精确表示所有十进制数。一个简单的测试揭示了差异:

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