当前位置: 首页 > 知识库问答 >
问题:

Double vs float-java[重复]

符畅
2023-03-14
public class Testing {

    public static void main(String[] args) {

         float     piF =  3.141592653589793f;   // value assigned has float precision
         double    piD =  3.141592653589793;   //  value assigned has double precision
         final double THRESHOLD = .0001; 
         if( piF == piD) 
            System.out.println( "piF and piD are equal" ); 
         else 
            System.out.println( "piF and piD are not equal" ); 
         if( Math.abs( piF - (float) piD ) < THRESHOLD ) 
            System.out.println( "piF and piD are considered equal" ); 
         else 
            System.out.println( "piF and piD are not equal" ); 

    }

}

结果:

piF and piD are not equal
piF and piD are considered equal

为什么piF和piD不相等呢?math.abs()实际上是什么使两者相同?

共有1个答案

丁曦
2023-03-14

我在终端中运行这个命令,然后添加piF和piD值的print语句,结果如下:

piF and piD are not equal
piF and piD are considered equal
piF = 3.1415927
piD = 3.141592653589793

当你直接比较这两者时,它们是不相等的。但是当您将piD强制转换为浮点类型时,它将变为:

(float) piD = 3.1415927

当你不明白结果的时候,尝试在变量上使用print语句,这是学习这些东西的一个很好的方法!

    System.out.println("piF = " + piF);
    System.out.println("piD = " + piD);

    System.out.println("(float) piD = " + (float) piD);
 类似资料:
  • 上面说这是一次意外的超驰,但这不是偶然的... 我想要的可能吗?还是必须重写方法。我更喜欢kotlin setter..

  • 当我运行这段代码时,它会打印。我的问题是为什么没有编译时错误?对象和字符串的默认值为NULL。那么为什么不编译器说。

  • 我在一个有这些类的项目中工作: 这些coures类具有其他方法和属性。 如果可以的话,它应该能够使用来自Square和RedRectangle的方法,否则它应该使用来自Rectangle的方法,并且它应该迫使开发人员从他自己的代码中为所有在Square和RedRectangle中被重写的方法编写代码。 我实际上知道这是多重继承,Java不支持它,但我需要实现这种行为。 我试图使用Square和Re

  • 问题内容: 为什么对以下代码感到重复类错误感到困惑? Netbeans将DBConnect突出显示为红色,并带有重复的类错误。 问题答案: 这是netbeans BUG 226360 的已知问题 这可能有助于清除Netbeans缓存: 转到-> ,您将看到 缓存目录: Path \ to \ Directory 关闭NetBeans,转到指定目录并删除所有内容。

  • 首先,这里是我的代码中有问题的部分;这些都是非常基本的类 TestClass: 所以,我认为问题出在客舱。这是我第一次在class things(我指的是if(checkPw(password)==true)部分)中使用该类。在测试类中,它看起来非常清楚而且我从来没有想过会出现这个错误。我该如何避免这条信息呢? 完全错误: Java结果:1

  • 我目前正在android studio中开发一个应用程序,我有一个用于存储图像URL的字符串数组列表。在for循环中,我每次都会向ArrayList添加一个值,但在for循环之后,ArrayList似乎会重新设置自己。 谁能给我解释一下为什么它会自动复位?

  • 问题内容: 我想我可能已经发现Java错误。 我有一个TreeMap,其中使用了自定义比较器。但是,似乎当我将(key,value)放在已经存在的键上时,它不会覆盖该键,从而创建了重复的键。我想我已经验证了这一点,因为我尝试过 这打印出真实的。有人知道为什么会这样吗? 这是比较器代码: 问题答案: 比较器始终需要返回一致的结果,并且在TreeMap中使用时,应与equals保持一致。 在这种情况下

  • 我们总是说,如果我们简单地定义变量< code>private并定义getters setters来访问这些变量,那么数据就会被封装。我的问题是,如果我们可以通过getters和setters访问变量(数据),那么数据是如何隐藏或安全的呢? 我在谷歌上搜索了很多解释,但我什么也没找到。每个人都刚刚在他们的博客和帖子中说这是一种数据隐藏技术,但它还没有被解释/详细说明。