C# 为什么Math.Round()的结果不像我在C中预期的那样#
为什么Math.Round(1.4445m,2,中点舍入.AwayFromZero)返回1.44而不是1.45?因为舍入就是这样工作的 正如@Sweeper所说,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
1.44445
比1.45
更接近1.44
1.44445
1。[44]4445
[44]
后面的下一个数字,也就是4
您的期望似乎与此递归函数类似,它将在一系列
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是准确的;你对舍入的理解是不准确的。鉴于标题已被编辑,我想规定“准确”在这种情况下,实际上是关于“近似值”。与数学的结果相比,将四舍五入到一个预期的结果(这是这个问题的基础)。这是一个“或多或少精确的近似值”或“更好或更差的近似值”的问题。我不想将其添加到答案中(因为我不确定),但这可能被称为“舍入误差”,因为它与有限精度的迭代计算有关。它可能在数值分析研究(研究误差如何在算法中传播的数学分支)参考