//浮点型数值
Double d = 0.0003d;
//转BigDecimal对象
BigDecimal a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.0006d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.0007d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.0008d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.0009d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.001d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度有时正常,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.009d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.03d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.06d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.09d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.3d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.6d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.7d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
d = 0.9d;
a = new BigDecimal(d);
System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));
//字符串类型数字
String str = new String("0.0003");
//转BigDecimal对象
a = new BigDecimal(str);
System.out.println(String.format("字符串类型数字:%s创建BigDecimal对象并且保留多位小数时,精度正常,结果为%s",str,a.setScale(8, BigDecimal.ROUND_DOWN)));
str = new String("0.0006");
a = new BigDecimal(str);
System.out.println(String.format("字符串类型数字:%s创建BigDecimal对象并且保留多位小数时,精度正常,结果为%s",str,a.setScale(8, BigDecimal.ROUND_DOWN)));
str = new String("0.9");
a = new BigDecimal(str);
System.out.println(String.format("字符串类型数字:%s创建BigDecimal对象并且保留多位小数时,精度正常,结果为%s",str,a.setScale(8, BigDecimal.ROUND_DOWN)));
使用字符串数值,转bigDecimal时,精度正常.
使用浮点型转bigDecimal时,有可能出现奇怪的数字.