2

I have this code below, my desired answer is 37.58 and not 37.56 or 37.60 after inputting 37576

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);

what changes do I have to make?

4

4 回答 4

3

使用以下代码:

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。

于 2013-01-14T10:42:10.170 回答
0

您使用了错误版本的除法(如果您立即四舍五入)。setScale 的值是错误的。你应该有:

BigDecimal res = n.divide(t, 2, BigDecimal.ROUND_HALF_UP);
于 2013-01-14T10:45:38.000 回答
0

使用此代码进行四舍五入:

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;
}
于 2013-01-14T10:42:30.877 回答
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表示您想将小数位移动两位数。

于 2013-01-14T11:01:41.910 回答