有没有办法在 .Net 中将十进制值四舍五入到最接近的 0.05 值?
例如:
7.125 -> 7.15
6.66 -> 6.7
如果不可用,是否有人可以提供算法?
如何尝试以下方法:
Math.Ceiling(myValue * 20) / 20
使用以下代码:
Math.Round(mydecimal / 0.05m, 0) * 0.05m;
可以在T-SQL中使用相同的逻辑:
ROUND(@mydecimal / 0.05, 0) * 0.05
我更喜欢这种方法,而不是所选答案,因为您可以直接看到所使用的精度。
这样的方法对于任何步骤都适用,而不仅仅是0.05步长:
private decimal RoundUp (decimal value, decimal step)
{
var multiplicand = Math.Ceiling (value / step);
return step * multiplicand;
}
Math..::.Round 方法 (Decimal, Int32, MidpointRounding)
将双精度浮点值舍入为指定小数位数。一个参数指定了当该值介于两个其他数字之间时如何进行舍入。
Math.Round(1.489,2,MidpointRounding.AwayFromZero)
在大多数公式中,我无法得到适当的四舍五入。
这个可以“四舍五入”到最近的数字
float roundFloat(float value, float toNearest) {
float divVal = (1 / (toNearest == 0 ? 1 : toNearest));
return ((float)(Math.Round(value * divVal)) / divVal);
}
结果:
roundFloat(2, 0.125F); -> 2
roundFloat(2.11, 0.125F); -> 2.125
roundFloat(2.22, 0.125F); -> 2.25
roundFloat(2.33, 0.125F); -> 2.375
roundFloat(2.44, 0.125F); -> 2.5
roundFloat(2.549999, 0.125F); -> 2.5
roundFloat(2.659999, 0.125F); -> 2.625
roundFloat(2.769999, 0.125F); -> 2.75
roundFloat(2.879999, 0.125F); -> 2.875
roundFloat(2.989999, 0.125F); -> 3
例子 0.125 最近的四舍五入
2.000
2.125
2.250
2.375
2.500
2.625
2.750
2.875
3.000