double浮点数计算的一些问题,以及bigDecimal的使用

考考你

先来几道简单的题目。

System.out.println(1/5); 输出结果是多少?

题目1答案

System.out.println(null-0.0); 输出结果是多少?

题目2答案

double部分

double 计算如果一个空null,会报错吗?

Double d1=0.0;
Double d2=1.0;
Double result=d1-d2;

实测报错。 所以double类型计算之前,要进行非空校验。
这里要注意的是, 如果不set null,初始化的值是0.0,是不报错的。

double类型将分母置1

因为如果是分母是0.0,那么结果会为Infinity。
所以最好置为其他值。

Double d1=0.0;
Double d2=1.0;
Double result=d1/(d2!=0?d2:1.0);

BigDecimal部分

为什么要用BigDecimal

java中浮点数计算不是很精准,BigDecimal可以很好的解决这个题目。

格式化小数位数

BigDecimal对这个的支持还是很好的。 例如,设置为6位小数。

private BigDecimal amount;

this.amount=new BigDecimal(0.0).setScale(6,BigDecimal.ROUND_HALF_UP);

答案部分

题目1答案

题目1:System.out.println(1/5); 输出结果是多少?

不是预期的0.2哦,而是0。
因为1/5这种写法会认为是整数除法,会忽略小数位。所以结果是0。

如果要返回0.2,以下2种都可以。

加上.0表示浮点数,会进行浮点计算:
1.0/5
加上d表示是double浮点类型,会进行浮点计算:
1d/5

题目2答案:

题目2:System.out.println(null-0.0); 输出结果是多少?

是输出0吗?
不对,会报错。 因为浮点数计算的时候不能为null。

其他

猜你喜欢

转载自blog.csdn.net/enthan809882/article/details/113939618