问题
float和double类型主要是为了科学计算与工程计算而设计的,它们并没有提供完全精确的结果,所以不应该被用于需要精确结果的场合。比如:
System.out.println(1.0-0.42) //输出 0.580000000000001
那么,当需要精确结果的时候,应该怎样处理?
解决
- 在需要精确结果的时候需要使用BigDecimal,BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法,方法中的参数也必须是BigDecimal的对象;
- 任何需要精确答案的计算任务,都不要使用float和double,可以使用
int、long或者BigDecimal
。使用BigDecimal可以很方便的选择舍入的方式,它一共提供了8种方式; - 如果数值范围没有超过9为十进制数字,使用int;如果超过9位但不超过18位数字,可以使用long;如果有可能超过18位数字,就必须使用BigDecimal。
结论
总之,对于任何需要精确答案的计算任务,请不要使用float或者double,如果你想让系统来记录十进制小数点,并且不介意因为不使用基本类型带来的不便,就可以使用BigDecimal。