文章目录
考考你
先来几道简单的题目。
System.out.println(1/5); 输出结果是多少?
System.out.println(null-0.0); 输出结果是多少?
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。