gpt4 book ai didi

java - C 和 Java 条件相同,结果不同

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:58 25 4
gpt4 key购买 nike

在 C 中:

float a = 1.3;
if (a == 1.3)
printf("Hello c");
else
printf("Bye c");

//output: Bye c

在 Java 中:

float a = 1.3;
if (a == 1.3)
System.out.println("Hello java");
else
System.out.println("Bye java");

//output: Hello java

为什么会这样?

最佳答案

您不能将“1.3”准确表示为二进制 float 。

将文字 1.3 转换为 float 将得到一个接近但不完全等于 1.3 的 float 。

在 Java 案例中,您很幸运,因为 JVM 将“1.3”解释为标准的 Java float 并转换为几乎相同的 1.3。二进制数。在 C 的情况下,标准说 1.3 应该被解释为“double”并将其转换为二进制 float ,比普通 float 更接近十进制值 1.3。

最重要的是,你永远不应该比较 float 是否相等,因为存储、计算顺序等方面的微小变化都会产生略微不同的结果。你应该总是像这样“括号”任何 float 比较:

if (a > 1.299 && a < 1.301) // something close to 1.3

关于java - C 和 Java 条件相同,结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8118188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com