java对大于10000000f的float类型数计算时,计数结果丢失数据精度的问题

我在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)的方法

猜你喜欢

转载自blog.csdn.net/qq_38522268/article/details/87800769
今日推荐