[java] string类型转为double
字符串“1467000000”通过Double.parseDouble以后转化为double类型,然后我用它除以100000000。结果得到的值变成14.669999999999998。再转化成字符串与“14.67”比较,结果是不相等。(但是谁都知道他们其实是相等的,我的期望也是如此)
我知道浮点数都有这个问题。但是有什么办法可以让程序得到他们是相等的办法,不要告诉我用int类型,因为我的数据可能出现小数的。 展开
精度的问题!用基本类型的double类型进行运算可能会丢失精度。而且特别大的数又没法处理。所以如果用BigDecimal这个类问题就解决了。这个类在java.Math包下。它可以处理任意精度的数据。对于楼主出现的问题,我从新写了段代码,供楼主参考。但是主要是还得查看API!代码如下:
import java.math.*;
public class oopp
{
public static void main(String[] args)
{
String a="1467000000";
double aa=Double.parseDouble(a);
BigDecimal beichushu=new BigDecimal(aa);
BigDecimal chushu=new BigDecimal(100000000);
BigDecimal result=beichushu.divide(chushu,new MathContext(4));//MathConText(4)表示结果精确4位!
boolean isTrue=String.valueOf(result).equals("14.67");
System.out.println("1467000000除以100000000="+result);
System.out.println(result+"与14.67比较的结果是"+isTrue);
}
}
另外就是将你的14.67*100000000再比较,放大而后再比较。
eps 大小为1e-8
当Math.abs(a-b)<eps
定义a,b为相等,这个是浮点数相等的解决办法。