使用SpringCloudAlibaba+Vue(ant-design)进行项目开发,一个BigDecimal类型的数,要求保留5位小数。

0、最简单的方式

public static void main(String[] args) {
        BigDecimal a = BigDecimal.valueOf(1000.00);
        BigDecimal b = BigDecimal.valueOf(4);
        //b:除数、5:需要保留的小数位、BigDecimal.ROUND_HALF_UP:舍入方式位四舍五入
        BigDecimal r = a.divide(b, 5, BigDecimal.ROUND_HALF_UP);
        System.out.println(r);
    }
//输出:250.00000

1、格式化数据

BigDecimal对象格式化可以使用DecimalFormat对象,首先看一下如何解决上述问题

public class BigDecimalTest {
    public static void main(String[] args) {
        //有两个decimal对象
        BigDecimal decimal = new BigDecimal(1.5001385);
        BigDecimal _decimal = new BigDecimal(1.5001);

        //格式化对象
        DecimalFormat decimalFormat = new DecimalFormat("0.00000");

        //超过5位默认进行四舍五入
        String strVal = decimalFormat.format(decimal);
        System.out.println(strVal);

        //不足5位补0
        String _strVal = decimalFormat.format(_decimal);
        System.out.println(_strVal);
    }
}

输出结果:在这里插入图片描述

2、解决返回后补位0消失的问题

完成上述操作后,本以为问题解决了,但是进行接口测试时发现,1.50010通过json返回给接口调用者之后,最后补位的0消失了。
原因:进行序列化时会使用数字的序列化方式,此时就会将末尾的0舍掉
解决:使用字符串的序列化方式,在字段对象上面添加注解 @JsonFormat(shape = JsonFormat.Shape.STRING)
在这里插入图片描述

3、DecimalFormat基本使用

贴一篇文章https://www.jianshu.com/p/b3699d73142e,此处只介绍各种符号及其基本使用

在这里插入图片描述

//例
double pi = 3.1415927;//圆周率
//取一位整数
System.out.println(new DecimalFormat("0").format(pi));//3
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pi));//3.14
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pi));//3
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%

 /**
  * 上面的代码就是网上很经典的案例,下面我们来分析另外的一个值
  */      
pi=12.34567;
//取一位整数
System.out.println(new DecimalFormat("0").format(pi));//12
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pi));//12.35
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pi));// 12.346
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pi));//12
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi));//1234.57%

/**
 * 扩展,如果是其他的数字会是下面的效果
 */
pi=12.34;
//整数
System.out.println(new DecimalFormat("6").format(pi));//612
System.out.println(new DecimalFormat("60").format(pi));//612
System.out.println(new DecimalFormat("06").format(pi));//126
System.out.println(new DecimalFormat("00600").format(pi));//00126
System.out.println(new DecimalFormat("#####60000").format(pi));//00126
//小数
System.out.println(new DecimalFormat(".6").format(pi));//12.6
System.out.println(new DecimalFormat(".06").format(pi));//12.36
System.out.println(new DecimalFormat(".60").format(pi));//12.36
System.out.println(new DecimalFormat(".0600").format(pi));//12.3406
System.out.println(new DecimalFormat(".6000").format(pi));//12.3406
System.out.println(new DecimalFormat(".600000##").format(pi));//12.340006
Logo

前往低代码交流专区

更多推荐