• 去掉BigDecimal类型变量小数点后多余的零


           业务背景:mysql中A表中的B字段的类型是decimal类型,小数位数是三位,某一条数据的值是3000000,在Java中查询出来的结果是3000000.000,这样显示在页面中不太好看,用户希望看到是3000000。 
          解决办法:使用 stripTrailingZeros().toPlainString()来解决。下面举例说明如何去掉BigDecimal类型变量小数点后多余的零: 
    BigDecimal testData = new BigDecimal("3000000.000");
    System.out.println("直接转换成字符串后输出:" + testData.toString());
    System.out.println("去掉尾部无用的零转并转换成字符串后输出:" + testData.stripTrailingZeros().toString());
    System.out.println("只展示数值:" + testData.stripTrailingZeros().toPlainString());
    System.out.println("工程计数法输出:" + testData.stripTrailingZeros().toEngineeringString());

            测试结果: 

    直接转换成字符串后输出:3000000.00
    去掉尾部无用的零转并转换成字符串后输出:3E+6
    只展示数值:3000000
    工程计数法输出:3E+6  
          但是,如果将3000000.000改为3000000.700等,小数点后面有非零数字的场景,则stripTrailingZeros().toString()不会输出为科学计数法。
         toString(),toPlainString(),toEngineeringString() 这三个方法都是用于将BigDecimal 转换成字符串,不同之处是toString()有可能会使用科学记数法,toPlainString()只展示数值,不使用科学记数法,toEngineeringString()工程计数法,与科学技术法类似,但要求10的幂必须是3的倍数。
    toPlainString
    toString
    toEngineeringString
    1000
    1 * 10^3
    1 * 10^3
    10000
    1 * 10^4
    10 * 10^3
    100000
    1 * 10^5
    100 * 10^3
    1000000
    1 * 10^6
    1 * 10^6
    但是,下面的方法不可以使用stripTrailingZeros()去除末尾无用的零,只能手动转换。
    public static void main(String[] args) {
        BigDecimal ratio= new BigDecimal("0.00");
        System.out.println(ratio.stripTrailingZeros().toPlainString());
        // 自行判断,判断相等的时候,使用comparTo(),equals()不靠谱
        if (0 == BigDecimal.ZERO.compareTo(ratio)) {
            System.out.println("0");
         }
        if (!BigDecimal.ZERO.equals(ratio)) {
             System.out.println(" 居然不相等 ");
        }
    } 
           总结:BigDecimal是处理高精度的浮点数运算的常用的一个类,当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到意料之外的科学技术法表示的问题。stripTrailingZeros()可以去除小数点后多余的0,用科学记数法表示,再结合toPlainString()即可输出数值。
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Vue --》this.$set()的神奇用法
    vue --》路由query 编程式导航传值与监听
    elementUI -->实现简单的购物车
    vue--》如何使用wacth监听对象的属性变化?
    laravel redis 删除指定前缀的 key
    php in_array 的一个坑
    laravel/lumen Command 的构造函数需要注意的地方
    git 合并连续的几个 commits
    盘点 php 里面那些冷门又实用的小技巧
    mockery expectation 覆盖
  • 原文地址:https://www.cnblogs.com/east7/p/11708141.html
Copyright © 2020-2023  润新知