我在下面有这个代码,输入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);
我必须做出哪些改变?
答案 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
表示您希望将小数位移两位数。