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
您好,我在使用 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