嗨,我对C#有这个非常奇怪的问题。
我正在尝试进行modulu操作:
double stepSize = 3.6;
if (180.0 % stepSize != 0) DoStuff();
180.0%3.6 = 0 - > "proof"
但由于某些原因,C#返回:3.6
是否有人对此有解释
答案 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