java - 有人可以向我解释一下在 Java 中为什么 0.6 <0.6f 但 0.7is >=0.7f

标签 java

<分区>

谁能解释一下为什么在java中

     if(0.6 <= 0.6f ) System.out.printf("true");
     else System.out.printf("false");

这打印为真 但是

    if(0.7 <= 0.7f ) System.out.printf("true");
    else  System.out.printf("false");

这打印错误

float 转为double比较是否与IEEE 754标准有关?

有人可以详细解释它的确切工作原理吗?

最佳答案

当然 - 这只是理解 0.6、0.6f、0.7 和 0.7f 中没有是那些精确值的问题。它们是适当类型中最接近的可表示近似值。为这 4 个值存储的确切值是:

0.6f => 0.60000002384185791015625
0.6  => 0.59999999999999997779553950749686919152736663818359375
0.7f => 0.699999988079071044921875
0.7  => 0.6999999999999999555910790149937383830547332763671875

有了这些信息,您就会清楚为什么会得到现在的结果。

换一种方式思考,假设您有两种decimal 浮点类型,一种具有 4 位精度,一种具有 8 位精度。现在让我们看看 1/3 和 2/3 是如何表示的:

1/3, 4dp => 0.3333
1/3, 8dp => 0.33333333
2/3, 4dp => 0.6667
2/3, 8dp => 0.66666667

因此在这种情况下,低精度值比高精度值小 1/3,但 2/3 则相反。对于 floatdouble 也是一样的,只是在二进制中。

关于java - 有人可以向我解释一下在 Java 中为什么 0.6 <0.6f 但 0.7is >=0.7f,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698198/

相关文章:

java - spring 如何将参数注入(inject)到 Controller 方法中

java - Tomcat 中的线程池和请求处理

Java:无法获取文件的绝对路径

java - 使用 Gson 将 XML 文件转换为 Json

java - 类类型变量或在构造函数/方法中实例化之间有什么区别

java - Arduino MPU6050 传感器无法使用 Arduino 网站上的代码

Java/Gradle 读取外部配置文件

java - 没有可用的 JTA UserTransaction - 指定 'userTransaction' 或 'userTransactionName'

java - 在部署到 PaaS (Cloud Foundry) 之前扫描 jar 文件

java - 使用 Lucene 将整个数据库索引到单个文档中