float输出,前7位有效数字是真实值,第8位是估算值,可能和原始一致,可能是四舍五入上来的。double值,前15位有效数字是真实值,第16位是估算值,可能和原始一致,可能是四舍五入上来的。当小数点后的有效位数超过float和doulbe的有效位置之后,计算会丢失精度。建议使用BigDecimal 且构造参数是String类型
public class Test{
public static void main(String[] args) {
Float aFloat = 1.11111111456780000012345f;
Double dDouble = 1.11111111456780000012345;
BigDecimal bigDecimal = new BigDecimal(aFloat);
System.out.println("aFloat:" + bigDecimal);
BigDecimal bigDecimalV2 = new BigDecimal(dDouble);
System.out.println("dDouble:" + bigDecimalV2);
BigDecimal bigDecimalV3 = new BigDecimal("1.11111111456780000012345");
System.out.println(bigDecimalV3);
}
}
输出
aFloat:1.111111164093017578125
dDouble:1.1111111145678000955427933149621821939945220947265625
1.11111111456780000012345
|