java金额转换的问题,想要保留小数点后两位,这样会下标越界该怎么改?

public static StringBuffer formatDoubleNum(double num, Boolean b) {
StringBuffer sb = new StringBuffer();
BigDecimal b0 = new BigDecimal("100");
BigDecimal b1 = new BigDecimal("10000");
BigDecimal b2 = new BigDecimal("100000000");
BigDecimal b3 = new BigDecimal(num);
String formatNumStr = "";
String unit = "元";
// 以百为单位处理
if (b) {
if (b3.compareTo(b0) == 0 || b3.compareTo(b0) == 1) {
return sb.append("99+");
}
return sb.append(num);
}
// 以万为单位处理
if (b3.compareTo(b1) == -1) {
formatNumStr = b3.toString();
} else if ((b3.compareTo(b1) == 0 && b3.compareTo(b1) == 1)
|| b3.compareTo(b2) == -1) {
unit = "万";
formatNumStr = b3.divide(b1).toString();
} else if (b3.compareTo(b2) == 0 || b3.compareTo(b2) == 1) {
unit = "亿";
formatNumStr = b3.divide(b2).toString();
}
if (!"".equals(formatNumStr)) {
int i = formatNumStr.indexOf(".");
if (i == -1) {
sb.append(formatNumStr).append(unit);
} else {
// i = i + 2; //保留小数点后两位
i = i + 1; //保留小数点后一位
String v = formatNumStr.substring(i, i + 1);//这里会越界
if (!v.equals("0")) {
sb.append(formatNumStr.substring(0, i + 1)).append(unit);//这里会越界
} else {
sb.append(formatNumStr.substring(0, i - 1)).append(unit);
}
}
}
if (sb.length() == 0)
return sb.append("0");
return sb;
}

哈?你的程序好复杂,我都没看明白

BigDecimal直接设置小数并设置四舍五入的方式不就好了吗?

public static void main(String[] args) {
BigDecimal b0 = new BigDecimal("123");
BigDecimal b1 = new BigDecimal("1234");
BigDecimal b2 = new BigDecimal("12345");
BigDecimal b3 = new BigDecimal("123456");
BigDecimal b4 = new BigDecimal("1234567");
BigDecimal b5 = new BigDecimal("12345678");
BigDecimal b6 = new BigDecimal("123.45678");
BigDecimal b7 = new BigDecimal("123.45678");

System.out.println(b0.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
System.out.println(b1.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
System.out.println(b2.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP));
System.out.println(b3.divide(new BigDecimal(10000), 2, RoundingMode.DOWN));
System.out.println(b4.divide(new BigDecimal(10000), 3, RoundingMode.HALF_UP));
System.out.println(b5.divide(new BigDecimal(100000), 3, RoundingMode.DOWN));

System.out.println(b6.setScale(2, RoundingMode.HALF_UP));
System.out.println(b7.setScale(2, RoundingMode.DOWN));
}

其中,setScale即设置小数位数是多少,RoundingMode表示四舍五入的方式,常用的就是HALF_UP表示四舍五入,DOWN表示直接舍掉,还有些其他的你查一下RoundingMode就行。

运行结果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-23
您好!您这个问题我也遇见过!以下是我的部分见解:检查 booking字符串,它被split(" ")之后,有可能少于5个字符串,赋值语句result[4]=ss[4]; 就会数组越界。非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!
相似回答