舍入到小数点后2位

时间:2013-01-14 10:35:38

标签: java rounding

我在下面有这个代码,输入37576后,我想要的答案是37.58而不是37.56或37.60

BigDecimal n = new BigDecimal(num);
BigDecimal t = new BigDecimal(100);

BigDecimal res = n.divide(t);
BigDecimal b =res.setScale(1, BigDecimal.ROUND_HALF_UP);
DecimalFormat forma = new DecimalFormat("K0.00");
String bigf = forma.format(b);



txtnewk.setText(" " + bigf);

我必须做出哪些改变?

4 个答案:

答案 0 :(得分:2)

使用以下代码:

String num = "37576";
BigDecimal n = new BigDecimal(num);
BigDecimal t = new BigDecimal(1000);
BigDecimal res = n.divide(t);
BigDecimal b = res.setScale(2, BigDecimal.ROUND_HALF_UP);

b根据需要为37.58。

答案 1 :(得分:0)

使用this code来舍入数字:

public static double round(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = Math.round(value);
    return (double) tmp / factor;
}

答案 2 :(得分:0)

您使用了错误的除法版本(如果您立即对其进行舍入)。 setScale的值是错误的。你应该:

BigDecimal res = n.divide(t, 2, BigDecimal.ROUND_HALF_UP);

答案 3 :(得分:0)

使用double即可

long l = 37576; // or Long.parseLong(text);
double v = Math.round(l / 10.0) / 100.0;
System.out.println(v);

打印

37.58

第一个舍入/ 10.0表示您希望通过舍入来删除最低位数,而/ 100.0表示您希望将小数位移两位数。