java - 为什么 0.5==0.5f 为真而 0.1==0.1f 为假?

标签 java literals

请看以下两段代码:

public static void main(String... args)
{
   System.out.println(0.5==0.5f);
}

输出:真

 public static void main(String... args)
 {
   System.out.println(0.1==0.1f);
 }

输出:假

为什么会这样?

最佳答案

您正在比较两种类型的值:double 和 float。 考虑不精确数字的大小限制。

一个例子:

精确值(十进制)

value1 -> 5 位小数的 1/2 是 0.50000
value2 -> 1/2 后 10 位小数是 0.5000000000

然后

value1 == value2 -> 返回真

不精确的值(十进制)

value3 -> 5 位小数的 1/3 是 0.33333
value4 -> 1/3 后 10 位小数是 0.3333333333

然后

value3 == value4 -> 返回 false,因为它们不一样。

0.1 不能用二进制精确表示(如十进制的 1/3),但 0.5 可以。

0.1d的二进制表示 -> 0.000(1100)1100110011...
0.5d -> 0.1

的二进制表示

关于java - 为什么 0.5==0.5f 为真而 0.1==0.1f 为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31357232/

相关文章:

java - Google Api Java 客户端驱动器文件搜索查询

java - 二叉树的最大深度

java - SQL查询删除重复记录不起作用

haskell - 将文字分配给 GHC 中的术语

rust - 带后缀的数字文字(例如0u8)在Rust中意味着什么?

java - 获取对象字段先前的值 hibernate JPA

java - 如何反转 map

python - 对于仅包含整数的文件,基数为 10 的 int() 的文字无效

c# - 为什么要在 char 上使用定界符?基于c的

c++ - 如何使用数值数组文字