四舍五入整数的最后一位数

问题描述 投票:2回答:6

我必须输入一个数字并将最后一位数字舍入为0或5。

  1. 从0,1,2到0,例如12 - > 10
  2. 从3,4,5,6,7到5,像37 - > 35
  3. 从8,9,0到0,再次像59 - > 60

我试过Math.ceilMath.floor,但那些都没有用。

java int rounding
6个回答
1
投票

Math.ceilMath.floor用于浮点数(如Doubles)。你想做什么没有内置功能,但这应该有效

public static int round(int original) {
    if original % 10 <= 2 {
        return original - (original % 10)
    } else if original % 10 <= 7 {
        return original - (original % 10) + 5
    }
    return original - (original % 10) + 10
}

如果您希望它使用负数,请使用:

public static int round(int original) {
    if original % 10 <= 2 {
        return original - (original % 10)
    } else if original % 10 <= 7 {
        return original - (original % 10) + 5
    } else if original % 10 <= 9 {
        return original - (original % 10) + 10
    } else if original % 10 >= -2 {
        return original - (original % 10)
    } else if original % 10 >= -7 {
        return original - (original % 10) - 5
    }
    return original - (original % 10) - 10
}

显然,你不能只复制和粘贴这段代码,因为你需要将它放在一个类中,并可能改变可见性和staticness(public static)部分。

要使用它,请致电int rounded = round(input)

希望这可以帮助!


2
投票

要将数字int n舍入到最接近的5的倍数:

((n + 2) / 5) * 5;

不需要复杂的逻辑。

更一般地说,将int n舍入到int m的倍数

((n + (m/2)) / m) * m;

如果你也想使用负数,它会变成:

((n + (n >= 0 ? 2 : -2)) / 5) * 5;

((n + (n >= 0 ? (m/2) : -(m/2)) / m) * m;

1
投票

这是一个简单的函数,可以舍入到你想要的任何值,它需要两个参数,其中一个是圆形的数字。另一个是(在你的情况下是5)精简的舍入。

public static double roundTo(double toRound, double precision){
    double holder = toRound/precision;
    int result = (int) Math.round(holder);
    return result*precision;
}

0
投票

qazxsw poi / qazxsw poi将浮点数舍入为最接近的整数。他们根本无法做你想要的,也就是为整数找到一些最接近的倍数。

您可以采取各种方法来解决此问题。我认为这是家庭作业吗?关键是不要找到一个库调用来做一个单行(这有助于我很确定没有开箱即用的这种库调用),重点是编写一些基本代码来做到这一点。

这是一种方式:

您可以使用Math.ceil(x modulo 10)获取最后一位数。请注意Math.floorx % 10,而不是-15 % 10),然后使用-5构造或一些5 / switch语句根据最后一位数做正确的事。

或者更棘手的方式:

当你在java中对2个整数进行除法时,结果总是四舍五入为整数,只是删掉逗号后面的位(所以对于正数,它向下舍入)。结束最后一个数字始终为0或5的数字的一种方法是除以5,再次乘以5。但你确实需要找出一个策略,以确保if成为else if而不是13,所以你必须在开始分割并乘以5之前添加一些东西。我会把它作为练习留给你找出如何做到这一点以及添加什么。


0
投票

没有内置的方法来实现这一点。你必须自己编写代码。

一种方法可以是计算mod 10并添加差异:

15

0
投票

事实上,这是四舍五入到最接近的5倍。四舍五入。

10

有了这个,你应该能够创建一个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.