舍入一个数字,使其可被5整除

时间:2011-02-02 13:22:12

标签: c# math

我想要舍入一个数字(十进制),以便它可以被5整除。

例如,我有一些数字和数字后的数字:

Number        Rounded
0.4           5
3.4           5
7.3           10

我可以使用ceil将此double转换为int并使用while循环将它们转到下一个5的倍数,但我想知道是否存在是实现这一目标的任何聪明方式。

感谢。

4 个答案:

答案 0 :(得分:36)

您可以先除以5,然后使用Math.Ceiling对值进行舍入。之后,你可以再次乘以5。

int rounded = (int) Math.Ceiling(Number / 5) * 5

答案 1 :(得分:10)

如果你想要

 f[6]  =  10
 f[-1] =  0  
 f[-6] = -5

Sören's answer没问题。

如果您想要:

 f[6]  =  10
 f[-1] =  -5 
 f[-6] = -10  
你可以做点什么:

f[x_] := Sign[x] Ceiling[Abs[x]/5] * 5  

C#:

var rounded = (int) Math.Sign(x) * Math.Ceiling(Math.Abs(x)/5) * 5;

答案 2 :(得分:6)

怎么样:

5 * decimal.Ceiling(num / 5)

答案 3 :(得分:0)

所有陈述的答案都很好,但是如果您需要性能,我怀疑您在 C# 中会得到比这更快的任何东西:

int i = Convert.ToInt32(input);
return (i % 5) == 0 ? i : i + 5 - (i % 5);

LinqPad 中的快速测试表明,这比迄今为止给出的最快答案平均快 50%。这是如果您按照 OP 的要求以小数开头。

如果您从整数开始运行,则第一行是不必要的,并且 return 语句的运行速度大约比最接近的竞争对手快 17 倍。