double 类型判断是否相等

本贴最后更新于 2300 天前,其中的信息可能已经天翻地覆

背景

使用了“==”和“!=”来判断 duble 类型,使用 sonar 等代码规范扫描会报如下错误:Floating point math is imprecise because of the challenges of storing such values in a binary representation. Even worse, floating point math is not associative; push a float or a double through a series of simple mathematical operations and the answer will be different based on the order of those operation because of the rounding that takes place at each step.

原因

duble 类型只可以判断大小,不可以判断是否相等,这样会失去精度,使判断没有意义。

解决方案

为两个 duble 类型的值设置误差,通过判断大小来判断是否相等,代码演示如下:

public static void main(String[] args) {

        double preErrorKey=1e-6; //1*10的-6次方即0.000001
        double key1=0.0000001d;
        double key2=0d;
        System.out.println(key1==key2); //结果是flase
        System.out.println(Math.abs(key1-key2)<preErrorKey);    //允许一定的误差范围,判断结果为true
    }
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3454 回帖 • 189 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • 事故
    6 引用 • 40 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...