Java BigDecimal 如何去掉末尾多余的 0

原文地址:https://blog.csdn.net/qq_28165595/article/details/119465037

前言
在日常项目中,我们经常会和价格、单价等金额打交道,为了保证数据的精度,我们一般会用BigDecimal来定义字段属性。BigDecimal有很多坑,平时开发中一定多注意,小细节要多注意,不小心就是一个现网事故啊。

BigDecimal的导致的科学计数法展示问题
No BB,直接上demo

@Test
public void testBidDecimal() {
//未设置小数位数,直接去掉了后面的小数0
BigDecimal test = new BigDecimal(100.00);
System.out.println(test.toString()); // 100
//设置了保留1位小数
test = new BigDecimal(100.00).setScale(1, RoundingMode.HALF_DOWN);
System.out.println(test.toString()); // 100.0

//设置了保留1位小时,小数位如果是0,直接省去,如果非零则保留
BigDecimal testStripTrailingZeros1 = new BigDecimal(123.00).
setScale(1, RoundingMode.HALF_DOWN).stripTrailingZeros();
System.out.println(testStripTrailingZeros1); // 123

//如果小数点前面是10的整数倍,会被表现成科学计数法
BigDecimal testStripTrailingZeros2 = new BigDecimal(100.000).
setScale(1, RoundingMode.HALF_DOWN).stripTrailingZeros();
System.out.println(testStripTrailingZeros2); //1E+2

//再加上toPlainString就能解决上述问题了
System.out.println(testStripTrailingZeros2.toPlainString()); //100
}
上面在直接使用stripTrailingZeros方法后,如果整数是10的倍数会被展示成科学计数法的形式,这样的数据传给前端,前端同学提着键盘就冲过来了。
————————————————
版权声明:本文为CSDN博主「爱琴孩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28165595/article/details/119465037

posted @ 2022-07-28 10:38  eyesfree  阅读(1197)  评论(0编辑  收藏  举报