【问题标题】:C# modulo is giving me the wrong asnwer? [duplicate]C# modulo 给了我错误的答案? [复制]
【发布时间】: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

有人解释一下吗

【问题讨论】:

标签: c# math modulo


【解决方案1】:

问题在于浮点运算,它无法精确地表示所有十进制数。一个简单的测试揭示了差异:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多