如何将一个双精度数四舍五入到下一个0.95 ?
这是我想要达到的目标:
4.15 should become 4.95
5.95 should become 5.95
6.96 should become 7.95
我怎样才能做到这一点?
我尝试使用Math.Round(),但它似乎只支持舍入到小数点的特定数量。不是一个特定的值。我也试过这个解决方案,但似乎这只适用于整数。
我是这么想的:
public static decimal myMethod(decimal inp)
{
decimal flr = Math.Ceiling(inp) - 0.05m;
decimal cll = Math.Ceiling(inp) + 1m - 0.05m;
return flr >= inp ? flr : cll;
}
你可能需要做一些测试,因为我只测试了你的值
没有现成的函数可用,所以您必须实现自己的逻辑。
第一种方法可以尝试遵循"人类逻辑"。像这样:
var result = (input - Math.Floor(input)) > .95
? Math.Ceiling(input) + .95
: Math.Floor(input) + .95;
正如我们所看到的,我们必须计算结果两次,所以我猜下面的方法应该更快(虽然这真的不重要,如果重要的话,我们应该添加一个真正的基准)。
var candidate = Math.Floor(input) + .95;
var result = candidate < input ? candidate + 1 : candidate;
如果你移动原点,它会变得更容易:而不是四舍五入到下一个0.95,你可以增加0.05,然后四舍五入到下一个整数,最后再减去0.05:
数学。天花板(x + 0.05m) - 0.05m
不需要区分大小写。