在Java中,如何将数字舍入到任意精度级别?

del*_*ber 3 java rounding

例如,假设我有一个方法

double roundDown(double unrounded, double precision) {
}

roundDown(137.42973, 0.01) would return 137.42
roundDown(137.42973, 0.05) would return 137.4
roundDown(137.42973, 0.25) would return 137.25
Run Code Online (Sandbox Code Playgroud)

有没有库可以做这样的事情,否则算法相当简单?

Aln*_*tak 5

将原始数字除以精度,向下舍入到最接近的整数,然后再次乘以精度:

double roundDown(double unrounded, double precision) {
    return precision * Math.floor(unrounded / precision);
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是固有的浮点不精确意味着你的号码可能不准确,你正在寻找的答案-例如,你可能会得到137.399999而不是137.4