JAVA中浮点数使用注意事项

需要精确计算时不要使用float和double

说明:浮点数在一个范围很广的值域上提供了很好的近似,但是它不能产生精确的结果。二进制浮点数对于精确计算是非常不适合的,因为它不可能将0.1,或者10的其它任何负次幂表示为一个长度有限的二进制小数。涉及精确的数值计算(货币、金融等),建议使用int, long, BigDecimal等
示例:
不好:以下输出结果是0.6100000000000001

System.out.println(1.03 - 0.42);

推荐:需要精确计算时

BigDecimal income = new BigDecimal("1.03");
BigDecimal expense = new BigDecimal("0.42");
System.out.println(income.subtract(expense));

不能用浮点数作为循环变量

说明:浮点数不能为循环因子,精度问题会导致 (float)2000000000 == 2000000050为true,所以如下的循环不会执行。

for (float f = (float) 2000000000; f < 2000000050; f++) {
    ...
}

浮点型数据判断相等不能直接使用

说明:由于浮点数在计算机表示中存在精度的问题,因此,判断2个浮点数相等不能直接使用等号可以采用如下方式:

float a =...;
float b =...;
if (Math.abs(a-b) < 1E-6f) {
      ...
} 

其中1E-6f为一个float极小值,实际使用时请根据情况判断精度,并且提取常量。 如果是double,请使用1E-6。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值