舍入双精度到指定的十进制值



如何将一个双精度数四舍五入到下一个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

不需要区分大小写。

相关内容

  • 没有找到相关文章

最新更新