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

时间:2011-09-14 21:09:33

标签: 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

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

2 个答案:

答案 0 :(得分:5)

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

double roundDown(double unrounded, double precision) {
    return precision * Math.floor(unrounded / precision);
}

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

答案 1 :(得分:4)

如果您想要真正十进制的任意精度,请查看此库:http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigDecimal.html