一关于精度损失
关于java对于0.05+0.01,1-0.42等计算的不准确原因是因为计算机是以二进制来储存一个数的,有的数从二进制转化到十进制时就会出现误差这就导致了计算的不准确,比如0.01在电脑里储存的其实是0.00999999999或者是其他的一个很接近0.01的数但是计算机毕竟是拿这个接近0.01的数去运算所以就出现了计算时候的错误
而解决这一问题的方法就是使用BigDecimal类,就比如BigDecimal a = new BigDecimal(m); BigDecimal b = new BigDecimal(n);a.add(b);来求m+n这就不会有误差,但要记住m,n都是字符串类型而不能使用double类型,因为虽然BigDecimal 是可以比较精确的计算,但是double是无法精确到1/10的就像十进制无法精确表示1/3一样。Double里面的的值已经不准确了,即使BigDecimal 可以较为精确的计算但是double给他的值就是不正确的,所以没办法得到正确答案。
二动手动脑
以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?、
第一个为X+Y=100200第二个为300=X+Y因为第一个先计算的是一个字符串和一个数字所以‘+’被认为是连接符只是连续输出可三部分,而第二个一开始是两个数字,‘+’被认为成了加号计算出X+Y然后又输出他们的和这时就成了数字与字符串这时‘+’又被认为成了连接符。关于‘+’的运用总结一下就是2个操作数中好友字符串时为连接符,都为数字时为运算符。