四舍五入到特定的十进制值
Round double to specific decimal value
我怎样才能将 double 舍入到下一个 .95?
这是我想要实现的目标:
4.15 should become 4.95
5.95 should become 5.95
6.96 should become 7.95
我怎样才能做到这一点?
我尝试使用 Math.Round(),但它似乎只支持四舍五入到特定数量的小数点。不是一个特定的值。
我也试过这个solution,但似乎这只适用于整数。
这是我的想法:
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;
如果你移动原点会更容易:
不是将数字 x 向上舍入到下一个 0.95,而是将它递增 0.05,然后向上舍入到下一个整数,最后再次减去 0.05:
Math.Ceiling(x + 0.05m) - 0.05m
不需要区分大小写。
我怎样才能将 double 舍入到下一个 .95?
这是我想要实现的目标:
4.15 should become 4.95
5.95 should become 5.95
6.96 should become 7.95
我怎样才能做到这一点?
我尝试使用 Math.Round(),但它似乎只支持四舍五入到特定数量的小数点。不是一个特定的值。 我也试过这个solution,但似乎这只适用于整数。
这是我的想法:
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;
如果你移动原点会更容易: 不是将数字 x 向上舍入到下一个 0.95,而是将它递增 0.05,然后向上舍入到下一个整数,最后再次减去 0.05:
Math.Ceiling(x + 0.05m) - 0.05m
不需要区分大小写。