Java 四舍五入到5的倍数 我想让我的程序更精确,并且考虑到没有1,2,7个值的硬币(只有5,10,20,50100…),所以有一个规则称为舍入到五个前缀。< /P>

Java 四舍五入到5的倍数 我想让我的程序更精确,并且考虑到没有1,2,7个值的硬币(只有5,10,20,50100…),所以有一个规则称为舍入到五个前缀。< /P>,java,rounding,currency,Java,Rounding,Currency,例如: 111,112 -> 110 113,114 -> 115 116,117 -> 115 118,119 -> 120 我的问题是,我应该在JAVA中使用哪个函数来达到我的目标并获得右舍入值?您可以这样写: int roundTo5(int value) { return ((value + 2) / 5) * 5; } 这取任意forint值,加2除以5。这将对整数进行“地板舍入”,并再次乘以5 0 → 2 → 0 → 0 1 → 3 →

例如:

111,112  -> 110 
113,114  -> 115
116,117  -> 115
118,119  -> 120

我的问题是,我应该在JAVA中使用哪个函数来达到我的目标并获得右舍入值?

您可以这样写:

int roundTo5(int value)
{
    return ((value + 2) / 5) * 5;
}
这取任意forint值,加2除以5。这将对整数进行“地板舍入”,并再次乘以5

0 → 2 → 0 → 0
1 → 3 → 0 → 0
2 → 4 → 0 → 0
3 → 5 → 1 → 5
4 → 6 → 1 → 5
5 → 7 → 1 → 5
6 → 8 → 1 → 5
7 → 9 → 1 → 5
8 → 10 → 2 → 10
9 → 11 → 2 → 10

假设a是要舍入的整数或浮点值

int round = Math.round( ((float)(a)/5) * 5);

如果声明为浮点,则可以跳过类型转换。

可以使用以下方法

public static int roundTo5(int n) {
        int t = n % 10; // get modulo 10 of n
        switch (t) {
        case 0:
        case 1:
        case 2:
            // result will be n - n%10;
            return n - t;
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
            // result will be n - n %10 + 5
            return n - t + 5;
        case 8:
        case 9:
            // result will be n - n%10 + 10;
            return n - t + 10;
        }
        return 0;
}

我不明白为什么没有提到这一点,但以下内容似乎应该能很好地完成这项工作:

5 * (Math.round(n / 5))

你可以写你自己的函数写你自己的,因为逻辑是从普通的四舍五入开始的(我的意思是ceil,floor,round)@Essigwurst小心整数除法!这是Java“不是1,2,7值的硬币”我不明白,我觉得这个问题有点被低估了。还要看看你是否真的需要将其转化为更改。这将给出一个0表示4的值(如果
a
是整数)。另外,还有一个括号。是的。我用浮点数做了测试。打字就可以了。但是首先使用浮动来表示货币价值是一个非常糟糕的主意。下次你买一个7.67美元的产品时,你要告诉收银员。xD@FilliposChristou但这仍然是一个整数(美分)。对于一种货币来说,比最小的硬币更精确的价格是罕见的(一个流行的例子是欧洲的汽油价格),但总的价格仍然是使用定点数学计算出来的。虽然这并不简洁,但它非常可读,并且可以证明是正确的+1但可以指定为%5。感谢Ryan的建议。我已经将该方法修改为publicstaticintroundto5(intn){intt=n%5;//获取n开关(t)的模5{case 0:case 1:case 2://结果将是n-n%5;返回n-t;case 3:case 4://结果将是n-n%5+5返回n-t+5;}返回0;}。这也提供了相同的结果。