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

前言

在日常项目中,我们经常会和价格、单价等金额打交道,为了保证数据的精度,我们一般会用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的倍数会被展示成科学计数法的形式,这样的数据传给前端,前端同学提着键盘就冲过来了。

    原文作者:爱琴孩
    原文地址: https://blog.csdn.net/qq_28165595/article/details/119465037
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞