java - float 比较

标签 java c

C语言

float a=0.1;

if(a==.1)
  printf("hello");
else
 printf("123");

输出为123

但对于 Java

float a=0.1F;

if(a==.1)
  System.out.println("hello");
else
  System.out.println("123");

答案是 hello .

为什么?

最佳答案

此处通过 == 进行比较,首先将 float 转换为 double,然后比较这两个值。

float real = 0.1f;
double real2 = real;
System.out.println(real2);

输出

0.10000000149011612

现在您可以看到,当您将 float 转换为 double0.1 时,您将无法在此处获得确切的值。这里系统会将您的float值转换为double,并具有额外数据精度。

当您编写 if(a==.1) 时,这里会发生同样的事情,您的 a 将被转换为类似 0.10000000149011612 的内容,并且比与 0.1 进行比较,它已经是 double 并且具有精确值 0.1,因此结果为 false 并且必须打印 123 而不是我确定的 hello

关于java - float 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420612/

相关文章:

c - fread() 无法正常工作?

c - 将 Unix 命令的输出存储在 C 代码中

c - fgets() linux 与 mac

c - 使用远程线程 : Where to store DLL filename/location in target process address space? 注入(inject) DLL 代码

java - Java中对象数组的降序选择排序

java - 在哪里可以找到 com.apple.eawt.event* 类引用

代码块中的 Conio2.h

java - CountSort 数组超出索引

JavaFX 2 - 无法导入 .css 文件

java - 存储 Java 对象以供在使用 REST 的 Web 应用程序中进一步使用