BigDecimal可以表示一个任意大小且精度完全准确的浮点数。
看了源码,BigDecimal主要是以一个BigInteger和int成员变量组成的
intVal表示数字部分,scale表示小数的位数。
BigDecimald1=newBigDecimal("123.45"); BigDecimald2=newBigDecimal("123.4500"); BigDecimald3=newBigDecimal("1234500"); /* 输出小数位数 */System.out.println(d1.scale()); // 2System.out.println(d2.scale()); // 4System.out.println(d3.scale()); // 0
格式化BigDecimal
使用 stripTrailingZeros()
方法可以将一个BigDecimal格式化为一个相等的,但去掉了末尾0的BigDecimal:
publicclassTest { publicstaticvoidmain(String[] args) { BigDecimalbd1=newBigDecimal("123.456"); BigDecimalbd2=newBigDecimal("123.4560"); System.out.println(bd1); System.out.println(bd2); System.out.println(bd2.stripTrailingZeros()); } }
比较BigDecimal
BigDecimal类提供两个比较方法,分别是 equal
和 compareTo
,两者区别在于前者除了数字部分一样,还需要小数位数一样,而后者是根据实际的值作比较。
因此必须使用 compareTo()
方法来比较,它根据两个值的大小分别返回负数、正数和0,分别表示小于、大于和等于。
publicclassTest { publicstaticvoidmain(String[] args) { BigDecimalbd1=newBigDecimal("123.456"); BigDecimalbd2=newBigDecimal("123.4560"); System.out.println(bd1.equals(bd2)); System.out.println(bd1.compareTo(bd2)); } }