JAVA中浮点数使用注意事项
2017-07-29 18:43
225 查看
需要精确计算时不要使用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。
相关文章推荐
- 使用JAVA编写报文接收端的注意事项
- Domino使用Java代理的注意事项
- 构造器内书写异常以及使用的注意事项---Thinking in java
- Java类集 _Map 接口的使用注意事项
- Java 中使用JDBC连接数据库例程与注意事项
- java生成exe工具之exe4j.exe(Java Exe Maker)的使用和注意事项
- Java中的String使用及注意事项
- java.util.List接口的方法subList()的使用注意事项
- 使用jdbc java 连接 sqlserver 2008数据库 需要注意的事项
- Android使用Java的第三方jar注意事项
- java中使用switch-case的用法及注意事项超全总结
- 关于Java开发中使用Oracle数据库的一点注意事项
- java 中关键字 static的使用及注意事项
- Java中使用JDBC连接数据库与注意事项
- java中使用正则表达式注意事项
- 【Java类集】_Map接口使用的注意事项笔记(亲测实例)
- Domino使用Java代理的注意事项
- java中ArrayList使用remove注意事项
- GDAL通过swig,在.net和java下使用注意事项.
- java的split使用注意事项