Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Math.Round()的结果不像我在C中预期的那样#_C#_Rounding - Fatal编程技术网

C# 为什么Math.Round()的结果不像我在C中预期的那样#

C# 为什么Math.Round()的结果不像我在C中预期的那样#,c#,rounding,C#,Rounding,为什么Math.Round(1.4445m,2,中点舍入.AwayFromZero)返回1.44而不是1.45?因为舍入就是这样工作的 正如@Sweeper所说,1.44445比1.45更接近1.44 你需要一个数字1.44445 现在您要将其四舍五入到小数点后2位,因此请在点后选择2位:1。[44]4445 然后看[44]后面的下一个数字,也就是4 4

为什么Math.Round(1.4445m,2,中点舍入.AwayFromZero)返回1.44而不是1.45?

因为舍入就是这样工作的

正如@Sweeper所说,
1.44445
1.45
更接近
1.44

  • 你需要一个数字
    1.44445
  • 现在您要将其四舍五入到小数点后2位,因此请在点后选择2位:
    1。[44]4445
  • 然后看
    [44]
    后面的下一个数字,也就是
    4
  • 4<5,因此不应采用四舍五入。编辑:我的意思是它将保持不变[44],当然剩下的数字将被归零

  • 您的期望似乎与此递归函数类似,它将在一系列
    Math.Round
    之后生成
    1.45

    double RecursiveMathRound(double val, int precisionLevel, int decimalPlace)
    {
        return (precisionLevel <= decimalPlace)
           ? Math.Round(val, precisionLevel, MidpointRounding.AwayFromZero)
           : RecursiveMathRound(Math.Round(val, precisionLevel, MidpointRounding.AwayFromZero), precisionLevel - 1, decimalPlace);
    }
    
    RecursiveMathRound(1.444445d, 5, 2);
    
    
    double RecursiveMathRound(双val,int-precisionLevel,int-decimalPlace)
    {
    
    return(precisionLevel)正是什么让您认为Math.Round()不“准确”?1.444xxx到小数点后两位应该是1.44!查看此处了解更多详细信息:
    1.44445
    更接近
    1.44
    ,而不是
    1.45
    。尝试在计算器上做一些减法运算。社区似乎对这个问题投了反对票,因为你认为这不准确-你认为问题在于函数n、 我认为你可以通过将标题改为“为什么Math.Round()没有像我预期的那样产生结果”来改进这个问题,问题仍然是预期的,但不会做出错误的断言。Math.Round是准确的;你对舍入的理解是不准确的。鉴于标题已被编辑,我想规定“准确”在这种情况下,实际上是关于“近似值”。与
    数学的结果相比,将
    四舍五入到一个预期的结果(这是这个问题的基础)。这是一个“或多或少精确的近似值”或“更好或更差的近似值”的问题。我不想将其添加到答案中(因为我不确定),但这可能被称为“舍入误差”,因为它与有限精度的迭代计算有关。它可能在数值分析研究(研究误差如何在算法中传播的数学分支)参考