运算常见问题
浮点数常见问题
1.double类型计算问题
首先我们看一下double类型的数据,计算会出现什么问题?
public static void main(String[] args) {double amount1 = 0.1;double amount2 = 1.2;System.out.println(amount2 - amount1);}
上边程序的运算结果是:1.0999999999999999
显然这不是我们想要的结果,如果想要得到理想的结果,我们应该使用BigDecimal类型进行计算。
2.BigDecimal计算
public static void main(String[] args) {BigDecimal bigDecimal1 = new BigDecimal("0.1");BigDecimal bigDecimal2 = new BigDecimal("1.2");System.out.println(bigDecimal2.subtract(bigDecimal1).toString());}
输出结果:1.1
显然这是我们想要的结果。
注意事项:初始化
转化为BigDecimal对象时,应该用String类型,如果使用double类型转换,依然会出现错误。示例如下:
public static void main(String[] args) {BigDecimal bigDecimal1 = new BigDecimal(0.1);BigDecimal bigDecimal2 = new BigDecimal(1.2);System.out.println(bigDecimal2.subtract(bigDecimal1).toString());}
输出结果:1.0999999999999999500399638918679556809365749359130859375
整数类型比较
1.Integer类型比较
尽量使用equals比较,使用==容易出现错误
public static void main(String[] args) {Integer integer1 = new Integer(1);Integer integer2 = new Integer(1);System.out.println(integer1 == integer2);}
以上代码输出:false
正确的方式:
public static void main(String[] args) {Integer integer1 = new Integer(1);Integer integer2 = new Integer(1);System.out.println(integer1.equals(integer2));}
以上代码输出:true
注意事项:避免null
public static void main(String[] args) {Integer integer1 = null;Integer integer2 = new Integer(1);System.out.println(integer1.equals(integer2));}
如果Integer为空,则会报空指针错误
Exception in thread "main" java.lang.NullPointerExceptionat com.example.demo.decimal.BigDecimalUtils.main(BigDecimalUtils.java:35)