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