【问题标题】:round decimal values up to the nearest of 0.01? [duplicate]将十进制值四舍五入到最接近的 0.01? [复制]
【发布时间】:2011-01-14 06:09:07
【问题描述】:

可能重复:
c# - How do I round a decimal value to 2 decimal places (for output on a page)

How to round decimal value up to nearest 0.05 value??,链接的 SO 帖子也讨论了类似的主题,但不是我预期的输出。

我需要像这样转换十进制值

16.489-->16.49
16.482-->16.48
16.425-->16.43
7.67 --> 7.67 (no conversion)

我可以使用下面的 C# 方法来转换值

  Math.Round(16.482*20)/20;

但是这种方法对我不起作用,它给出了以下结果

16.489-->16.5 
16.482-->16.5 
7.67 --> 7.7
16.425-->16.45 

c# 中有什么优雅的方式来做到这一点。

【问题讨论】:

    标签: c# numbers rounding


    【解决方案1】:

    Math..::.Round Method (Decimal, Int32, MidpointRounding)

    将双精度浮点值四舍五入为指定的小数位数。参数指定如果值在其他两个数字的中间值,如何对其进行舍入。

       Math.Round(1.489,2,MidpointRounding.AwayFromZero)
    

    【讨论】:

    • 如果要四舍五入到最近的四分之一怎么办?所以 1.489 轮到 1.5,但 1.479 轮到 1.475?
    • Math.Round(1.479,2,MidpointRounding.AwayFromZero) 舍入到 1.48
    • @Fredou,它工作正常......谢谢......
    • 但我不想在那个例子中四舍五入到 1.48,我想四舍五入到 1.475。我希望最后两位数字四舍五入为 0、25、5 或 75,具体取决于最接近的数字。
    • @anthony,我睡着了,但是......应该这样做吗? (decimal)(int)(decimal)(1.479*100)/100+(Math.Round((decimal)1.479,2,MidpointRounding.AwayFromZero) - (decimal)1.479)/2*10
    【解决方案2】:

    你试过了吗

     Math.Round(16.482*200)/200;
    

    【讨论】:

    • 没有更清洁的方法吗?
    • 我不知道,我不懂 C#。我只知道示例代码是如何工作的。它只是将数字乘以您要舍入的倒数,然后将该总和除以相同的倒数以返回相同的数字。您可以使用相同的想法四舍五入到最近的四分之一(这就是我学会这个技巧的方法)。
    • 你可以创建一个函数来插入值和你想要四舍五入的值,但由于 SO 似乎没有意识到他想要四舍五入到 0.005,我不确定这是否会有所帮助。
    • @Anthony,我也试过了。它不适用于 16.425 或 16.124。
    • @Ramesh,它对其他人有用吗?
    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多