package cn.hncu.big;
import java.math.BigDecimal;
public class BigDecimalDemo {
public static void main(String[] args) {
//工程上如果用double来计算小数,存在计算不准的bug
double sum=0.0;
for(int i=0;i<10;i++){
sum +=0.1;
}
System.out.println(sum);
System.out.println("-------------");
//用BigDecimal可以解决上面的问题
//BigDecimal d = 0; //WA: 不能把基本数据类型的值或变量 直接赋给 BigDecimal变量,因为两者数据不对等。一个是数值,一个是对象
BigDecimal d = new BigDecimal(0); //这里用BigDecimal.valueOf(0)也可以
for(int i=0;i<10;i++){
d = d.add( new BigDecimal(0.1));//赋初值
}
System.out.println("d:"+d); //1.000000000000000055511151231257827021181583404
System.out.println("d:"+d.doubleValue()); //1.0
//指定小数的有效位数
//d.divide(BigDecimal divisor, int scale, int roundingMode); //scale是指小数的有效位数, roundingMode是四舍五入的模式
BigDecimal bg = d.divide( new BigDecimal(1.0), 2, BigDecimal.ROUND_HALF_UP);
System.out.println(bg.doubleValue()); //1.0
}
}
import java.math.BigDecimal;
public class BigDecimalDemo {
public static void main(String[] args) {
//工程上如果用double来计算小数,存在计算不准的bug
double sum=0.0;
for(int i=0;i<10;i++){
sum +=0.1;
}
System.out.println(sum);
System.out.println("-------------");
//用BigDecimal可以解决上面的问题
//BigDecimal d = 0; //WA: 不能把基本数据类型的值或变量 直接赋给 BigDecimal变量,因为两者数据不对等。一个是数值,一个是对象
BigDecimal d = new BigDecimal(0); //这里用BigDecimal.valueOf(0)也可以
for(int i=0;i<10;i++){
d = d.add( new BigDecimal(0.1));//赋初值
}
System.out.println("d:"+d); //1.000000000000000055511151231257827021181583404
System.out.println("d:"+d.doubleValue()); //1.0
//指定小数的有效位数
//d.divide(BigDecimal divisor, int scale, int roundingMode); //scale是指小数的有效位数, roundingMode是四舍五入的模式
BigDecimal bg = d.divide( new BigDecimal(1.0), 2, BigDecimal.ROUND_HALF_UP);
System.out.println(bg.doubleValue()); //1.0
}
}