我是靠谱客的博主 香蕉花卷,最近开发中收集的这篇文章主要介绍float、double之间如何比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于浮点数的精度问题,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之间如何比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部