四舍五入整数的最后一位

时间:2018-09-08 10:48:18

标签: java int rounding

我必须输入一个数字并将最后一位四舍五入为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,但它们不起作用。

6 个答案:

答案 0 :(得分: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 :(得分:1)

Math.ceilMath.floor用于浮点数(例如Double)。您没有想要的内置功能,但这应该可以工作

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
}

很显然,您不能只复制并粘贴此代码,因为您需要将其放入类中,并可能更改可见性和static的风格(public static)。 / p>

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

希望这会有所帮助!

答案 2 :(得分:1)

这是一个简单的函数,可以四舍五入为所需的任何值,它需要两个参数,其中一个是要舍入的数字。另一个是舍入精度(在您的情况下为5)。

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

答案 3 :(得分:0)

Math.ceil / Math.floor将浮点数四舍五入到最接近的整数。他们根本无法做您想做的事情,那就是找到一个整数的最接近倍数。

您可以采用多种方法来解决此问题。我想这是家庭作业吗?关键不是找到一个库函数来单行执行(这可以帮助我确定没有这样的库函数开箱即用),关键是编写一些基本代码来实现。 / p>

这是一种方法:

您可以使用x % 10(这是x模10)获得最后一位数字。请注意,-15 % 10-5,而不是5,然后使用{{ 1}}的结构或几个switch / if语句来根据最后一位数字做正确的事情。

或更棘手的方式:

在Java中对2个整数进行除法时,结果总是四舍五入为整数,方法是仅舍弃逗号后面的位(因此对于正数,它会舍入)。一种以最后一位始终为0或5的数字结尾的方法是除以5,然后再乘以5。但是您确实需要找出一种策略来确保else if变成13而不是15,因此您必须先添加一些内容,然后再进行除法和乘以5.我将把它留给您练习,以弄清楚该如何做以及要添加什么。

答案 4 :(得分:0)

没有内置方法可以实现。您必须自己编写代码。

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

int customRound(int n){
    int diff, mod = n % 10;

    if(mod < 3) diff = 0;
    else if(mod < 8) diff = 5;
    else diff = 10;

    return n - mod + diff;
}

答案 5 :(得分:0)

实际上四舍五入到最接近的5倍。 四舍五入。

{{1}}

使用此方法,您应该可以创建解决方案。