如何将十进制值舍入到最接近的0.05值?

Pra*_*dda 18 .net c# algorithm decimal rounding

有没有办法将十进制值四舍五入到.Net中最近的0.05值?

例如:

7.125 - > 7.15

6.66 - > 6.7

如果它现在可用,任何人都可以提供算法吗?

Ada*_*ire 27

怎么样:

Math.Ceiling(myValue * 20) / 20
Run Code Online (Sandbox Code Playgroud)

  • 正如警告一样,如果输入在十进制最大值的20倍之内(因此,对于十进制类型大于约4*10 ^ 27),则可能会出错.您可以通过减去Math.floor,舍入非整数部分,然后将其添加回楼层值来解决此问题.但由于原始提问者的使用是为了计算税收,我怀疑它是否重要,除非它必须在津巴布韦工作...... (8认同)
  • Math.Ceiling(myValue/0.05)*0.05更直接的方式(更容易更改舍入到步骤) (7认同)

Mar*_*arc 10

用这个:

Math.Round(mydecimal / 0.05m, 0) * 0.05m;
Run Code Online (Sandbox Code Playgroud)

在T-SQL中可以使用相同的逻辑:

ROUND(@mydecimal / 0.05, 0) * 0.05
Run Code Online (Sandbox Code Playgroud)

我更喜欢这种方法来选择答案,因为您可以直接看到所使用的精度.

  • Math.Round不允许Round Up (3认同)

zvo*_*kov 6

这样的东西应该适用于任何步骤,而不仅仅是0.05:

private decimal RoundUp (decimal value, decimal step)
{
    var multiplicand = Math.Ceiling (value / step);
    return step * multiplicand;
}
Run Code Online (Sandbox Code Playgroud)