zoukankan      html  css  js  c++  java
  • BigDecimal

    BigDecimal

    概念

    BigDecimal = 大的小数。用于表示精确的小数,常用于财务计算。
    BigInteger类似,BigDecimal可以表示一个任意大小且精度完全准确的浮点数。

    基础

    BigDecimal bd = new BigDecimal"123.4567");
    

    BigDecimal用scale()表示小数位数,例如:

    BigDecimal d1 = new BigDecimal("123.45");
    BigDecimal d2 = new BigDecimal("123.4500");
    BigDecimal d3 = new BigDecimal("1234500");
    System.out.println(d1.scale()); // 2,两位小数
    System.out.println(d2.scale()); // 4
    System.out.println(d3.scale()); // 0
    

    stripTrailingZeros()方法,去掉末尾的0

    BigDecimal d1 = new BigDecimal("123.4500");
    BigDecimal d2 = d1.stripTrailingZeros();
    System.out.println(d1.scale()); // 4
    System.out.println(d2.scale()); // 2,因为去掉了00
    

    四舍五入方法

    public class Main {
        public static void main(String[] args) {
            BigDecimal d1 = new BigDecimal("123.456789");
            BigDecimal d2 = d1.setScale(4, RoundingMode.HALF_UP); // 四舍五入,123.4568
            BigDecimal d3 = d1.setScale(4, RoundingMode.DOWN); // 直接截断,123.4567
            System.out.println(d2);
            System.out.println(d3);
        }
    }
    

    对BigDecimal做加、减、乘时,精度不会丢失,但是做除法时,存在无法除尽的情况,这时,就必须指定精度以及如何进行截断:

    BigDecimal d1 = new BigDecimal("123.456");
    BigDecimal d2 = new BigDecimal("23.456789");
    BigDecimal d3 = d1.divide(d2, 10, RoundingMode.HALF_UP); // 保留10位小数并四舍五入
    

    使用equals()方法比较两个BigDecimal的值是否相等时,要特别注意,不但要求两个BigDecimal的值相等,还要求它们的scale()相等:

    BigDecimal d1 = new BigDecimal("123.456");
    BigDecimal d2 = new BigDecimal("123.45600");
    System.out.println(d1.equals(d2)); // false,因为scale不同
    System.out.println(d1.equals(d2.stripTrailingZeros())); // true,因为d2去除尾部0后scale变为2
    System.out.println(d1.compareTo(d2)); // 0
    

    必须使用compareTo()方法来比较,它根据两个值的大小分别返回负数、正数和0,分别表示小于、大于和等于。
    总是使用compareTo()比较两个BigDecimal的值,不要使用equals()!

    如果查看BigDecimal的源码,可以发现,实际上一个BigDecimal是通过一个BigInteger和一个scale来表示的,即BigInteger表示一个完整的整数,而scale表示小数位数:

    public class BigDecimal extends Number implements Comparable<BigDecimal> {
        private final BigInteger intVal;
        private final int scale;
    }
    

    小结

    BigDecimal用于表示精确的小数,常用于财务计算;
    比较BigDecimal的值是否相等,必须使用compareTo()而不能使用equals()。

    参考:https://www.liaoxuefeng.com/wiki/1252599548343744/1279768011997217

  • 相关阅读:
    服务器端和客户端有什么区别
    在 CSS 中,width 和 height 指的是内容区域的宽度和高度
    弹出框
    cdn 查询库
    超链接 a的小手
    jsonk可以传递boolean
    list,set中可以存放Object类型对象
    $("p").click();触发每一个匹配元素的click事件
    jquery选择器中的逗号
    <input type="text" onfocus="func();" onblur="func1();"/>
  • 原文地址:https://www.cnblogs.com/twodoge/p/11527817.html
Copyright © 2011-2022 走看看