【问题标题】:Why does .net modulo works different than windows calcuator for small numbers?为什么 .net modulo 的工作方式与 Windows 计算器的小数不同?
【发布时间】:2019-08-26 07:06:49
【问题描述】:

为什么1070 % 21,4 在 windows 计算器和 .net 中给出不同的结果?

(.Net 结果是 7.1....)

结果应始终为0。我理解大数字的区别,但这些小数字应该可以工作,恕我直言。

非常感谢!

【问题讨论】:

  • .NET 结果不是 7.1。它是 7.1 x 10^-14,或 0.000000000000071。而且,如果您想知道“为什么是 7.1 x 10^-14?”见this question
  • 为 0 但结果类型为 double dotnetfiddle.net/tWUzhC
  • 在浮点数学方面,小数和大数一样糟糕 - 例如,在 .NET 中,0.1 + 0.2 == 0.3false
  • 我的错,我错过了指数...
  • 阅读 Lippert 系列文章总是很酷Floating Point Arithmetic

标签: c# calculator modulo


【解决方案1】:

% 运算符的全部内容都在文档中。它的浮点余数,而不是模数。如果您想要与计算器兼容的东西,请使用 this function

例如:

private static void ShowRemainders(double number1, double number2)
{
   var formula = $"{number1} / {number2}";
   var ieeeRemainder = Math.IEEERemainder(number1, number2);
   var remainder = number1 % number2;
   Console.WriteLine($"{formula,-16} (.IEEE) = {ieeeRemainder,18}");
   Console.WriteLine($"{formula,-16} (.NET)  = {remainder,18}");
}

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多