我在java里使用float类计算时出现下面问题:
double number1=10000000.00f-100.00f; System.out.println(number1); double number2=20000000.00f-100.00f; System.out.println(number2); double number3=100000000.00f-100.00f; System.out.println(number3);
结果:
9999900.0
1.99999E7
9.9999904E7
number2和number3的计数结果里出现了E,且都大于10000000,姑且认为大于10000000就会出现E,我开始以为是计数法的转换,实际数据精度并没有错误
但我查找资料发现科学计数法的E,代表的是10的次方,那么我需要在业务中保证数据的精确性该怎么办?
使用BigDecimal(String val)的方法能够保证数据在计数的过程中不发生精度丢失:
BigDecimal bigDecimal1=new BigDecimal("10000000000.00"); BigDecimal bigDecimal2=new BigDecimal("100.00"); BigDecimal bigDecimal3=bigDecimal1.subtract(bigDecimal2); System.out.println(bigDecimal3);
输出9999999900.00
结论:如果需要对大数据类型(比如大于10000000)的float的数进行计数,建议采取BigDecimal(String val)的方法