package com.BigDecimal;
public class BigDecimalDemo {
/*
* 下面的运算的结果出乎我们的意料,有些准确,有些不准确
* 这是为什么呢?
* 我们知道,数据进行运算时先将它转换成为补码进行运算,所以就设计到一个二进制转换的问题
* 浮点数的小数点后面的数是乘以2得1 0计算二进制的对吧,因为有些小数无论如何就是不能得到0,
* 也就是一个无限的小数类,这样的数据永远无法得到完整的10表示,所以float和double操作时候
* 出现一个叫做有效数字的说法。当然后面一个是可以的,那是因为两个浮点数刚好可以转换好0101
* 这是因为浮点数的存储和整形的存储不同导致的。它们大部分的时候,都是带有有效数字位
* 引出BigDecimal
* 由于在运算的时候,float类型和double很容易丢失精度。所以,为了能精确的表示、计算浮点数,java提供了BigDecimal
* BigDecimal类概述
* 不可变的,任意精度的有符号十进制数。可以解决精度丢失问题
*/
public static void main(String[] args) {
System.out.println(0.09+0.01);//0.09999999999999999
System.out.println(1.0-0.32);//0.6799999999999999
System.out.println(1.015*100);//101.49999999999999
System.out.println(1.301/100);//0.013009999999999999
System.out.println(1.0-0.12);//0.88
}
}
package com.BigDecimal;
import java.math.BigDecimal;
/*
* 构造方法
* public BigDecimal(String val)
*
* public BigDecimal add(BigDecimal augend) :加
* public BigDecimal subtract(BigDecimal subtrahend) 减
* public BigDecimal multiply(BigDecimal multiplicand) 乘
* public BigDecimal divide(BigDecimal divisor) 除
* public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode) 商 几位小数 如何舍取
*
*
*/
public class BigDecimalDemo02 {
public static void main(String[] args) {
// System.out.println(0.09+0.01);//0.09999999999999999
// System.out.println(1.0-0.32);//0.6799999999999999
// System.out.println(1.015*100);//101.49999999999999
// System.out.println(1.301/100);//
BigDecimal bd1=new BigDecimal("0.09");
BigDecimal bd2=new BigDecimal("0.01");
System.out.println("add:"+bd1.add(bd2));
System.out.println("--------------------------");
BigDecimal bd3=new BigDecimal("1.0");
BigDecimal bd4=new BigDecimal("0.32");
System.out.println("subtract:"+bd3.subtract(bd4));
System.out.println("--------------------------");
BigDecimal bd5=new BigDecimal("1.015");
BigDecimal bd6=new BigDecimal("100");
System.out.println("multiply:"+bd5.multiply(bd6));
System.out.println("--------------------------");
BigDecimal bd7=new BigDecimal("1.301");
BigDecimal bd8=new BigDecimal("100");
System.out.println("divide:"+bd7.divide(bd8));
System.out.println("--------------------------");
System.out.println("divide:"
+bd7.divide(bd8,3,BigDecimal.ROUND_HALF_UP));//ROUND_HALF_UP四舍五入,其他方式舍取看API
System.out.println("divide:"
+bd7.divide(bd8,8,BigDecimal.ROUND_HALF_UP));
}
}