如何将浮点数舍入到点后的一位数

时间:2017-09-06 21:33:09

标签: c# .net-core

最有可能的是,它是重复的,而且我不了解一些基础知识,因此值得投票,但这只会让我发疯。

我在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操作:

  1. 第一个Round,小数点2;
  2. 第二个Round,第一个结果为1十进制。
  3. 这是一种正确的方法吗?

    更新

    我现在看到,在学校我们得到了一个双重(三重等)舍入(https://en.wikipedia.org/wiki/Rounding#Double_rounding)的概念,它在每一步累积错误,并且不是由所使用的舍入Math.Round,这就是为什么我没有得到我期望得到的结果(9.749 - > 9.75 - > 9.8)。

    但我确实需要完成这样一个"后续的"四舍五入,从右到左,逐个数字。所以,我想,没有标准功能,我需要自己实现它。

1 个答案:

答案 0 :(得分:3)

在数学中,9.74999轮到9.7。代码使用数学。

使用较少的snark进行编辑:9.75和更高将达到9.8。小于9.75(且大于或等于9.65)的任何内容将舍入到9.7。我认为你让自己感到困惑,并认为999会将.74的比例提高到0.75,但事实并非如此。

相关问题