概述
关于浮点数的精度问题,float、double之间如何比较?
????问题还原:
float a = 32766.7;
☘️这段代码看上去没有问题,32766.7是小数啊,没超过float的范围呀,float应该是可以的呀,感觉没有什么问题。但是事实上确实错了,代码报错:
Required type: float
Provided: double
搜索资料后发现是java代码默认的小数是double类型,所以需要填写上f于是继续写代码,写到了下面。
☘️例子代码:
public class Main {
public static void main(String[] args) {
float a = 32766.7f;
if (32766.7 == a) {
System.out.println(true);
} else {
System.out.println(false);
}
}
}
----output----
false
两个32766.7怎么又错了呢?问题就出在精度上,具体的可以参考java开发手册下的东西:
注意这边的new BigDecimal 一定要用字符串构造函数,而不能直接使用double类型,会存在精度问题。
☘️那么综合下来最好的办法就是:
public class Main {
public static void main(String[] args) {
Float a = 32766.7f;
Double b = 32766.7d;
System.out.println(a.toString());
System.out.println(b.toString());
BigDecimal decimalA = new BigDecimal(String.valueOf(a));
BigDecimal decimalB = new BigDecimal(String.valueOf(b));
if (decimalA.compareTo(decimalB) == 0) {
System.out.println(true);
} else {
System.out.println(false);
}
}
}
----output----
32766.7
32766.7
true
过程就是先将float和double都变成字符串,再从字符串中封装成BigDecimal
再进行比较,注意,这里就用compareTo方法,不然用equals()方法会比较精度。
最后
以上就是香蕉花卷为你收集整理的float、double之间如何比较的全部内容,希望文章能够帮你解决float、double之间如何比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复