Java:四舍五入到最接近的5的倍数(向上或向下)

62

我需要将一个数字四舍五入到最接近的5的倍数(向上或向下)。例如,以下是数字列表及其需要四舍五入的结果。

12.5  10
62.1  60
68.3  70
74.5  75
80.7  80

数字将仅为正数。


6
你希望中点(例如12.5)发生什么变化? - Jon Skeet
@AndroidDev 如果“12.5将是10”,那么很遗憾,我的答案不适用。在这种情况下,您必须应用Achintya的想法。 - gefei
7个回答

111

我没有测试过,但是 5*(Math.round(f/5)); 应该可以工作


好的,我很接近了。你的解决方案与koljaTM的相同。我不确定谁应该得到勾选标记。他的显示为0,而你的显示为8,但时间是相同的。谁应该得到勾选标记? - Johann
这个不起作用... 例如 - 75.5 应该四舍五入为 76,但它没有。 - Milinda Bandara
6
@MilindaBandara,你为什么认为75.5应该返回76?根据问题提出者给出的示例,它应该返回75。 - gefei
请记住,这不是万无一失的解决方案!在处理非常大的值时,您可能会遇到双精度浮点数精度问题。 - Dave_cz

47

最接近且大于指定值的5的倍数

5*(Math.ceil(Math.abs(number/5)));

低值优先

5*(Math.floor(Math.abs(number/5)));

它只会提供正数值。


@chamzz.dot Yap - Serg Burlaka

8
public static void main(String args[]) {
    double num = 67.5;
    if (num % 5 == 0)
        System.out.println("OK");
    else if (num % 5 < 2.5)
        num = num - num % 5;
    else
        num = num + (5 - num % 5);
    System.out.println(num);

}

尝试这个。

6
像这样怎么样呢:
return round((number/5))*5;

5

Gefei的解决方案是可行的,但我必须明确地将其转换为double,就像这样:5*(Math.round((double)f/5))


3

如果输入的是整数,则不做处理;否则,接受的答案会向下舍入。

int value = 37;
value = (int) ( Math.round( value / 5.0 ) * 5.0 );

2

这个页面上有许多其他解决方案,但我认为这是最简洁的一个。

要找到给定数字的最接近x的倍数,

让x成为倍数,num成为给定数字:

// The closest multiple of x <= num
int multipleOfX = x * ( num / x );

在您的情况下:

最初的回答:

int multipleOf5 = 5 * ( num / 5 );

3
请注意,这只返回您的向下取整答案。 - user10073385

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接