最有可能的是,它是重复的,而且我不了解一些基础知识,因此值得投票,但这只会让我发疯。
我在Mac OS上使用 C#和 .NET Core 。
我有一个浮动9.74999
,我希望将它四舍五入到一位数后得到9.8
(就像我应该按照小学时记得的那样工作:9.749 - > 9.75 - > 9.8 - > 10 )。
我试过了:
float rounded = (float)Math.Round(9.74999f, 1, MidpointRounding.AwayFromZero);
// rounded = 9.7
为什么它不是9.8
?那么,它只需要感兴趣的数字(7
)和下一个数字(4
)并且不关心其余部分(999
)?
这种结构实际上给了我想要的东西:
float rounded = (float)Math.Round(
(float)Math.Round(9.74999f, 2, MidpointRounding.AwayFromZero),
1,
MidpointRounding.AwayFromZero
);
// rounded = 9.8
因此,我9.8
9.74999
的唯一方法是执行两次Round
操作:
Round
,小数点2
; Round
,第一个结果为1
十进制。这是一种正确的方法吗?
我现在看到,在学校我们得到了一个双重(三重等)舍入(https://en.wikipedia.org/wiki/Rounding#Double_rounding)的概念,它在每一步累积错误,并且不是由所使用的舍入Math.Round
,这就是为什么我没有得到我期望得到的结果(9.749
- > 9.75
- > 9.8
)。
但我确实需要完成这样一个"后续的"四舍五入,从右到左,逐个数字。所以,我想,没有标准功能,我需要自己实现它。
答案 0 :(得分:3)
在数学中,9.74999轮到9.7。代码使用数学。
使用较少的snark进行编辑:9.75和更高将达到9.8。小于9.75(且大于或等于9.65)的任何内容将舍入到9.7。我认为你让自己感到困惑,并认为999会将.74的比例提高到0.75,但事实并非如此。