在java中浮动生成意外输出

Pra*_*eek 2 java

我正在编写一个带浮动的示例程序,但突然发生了一些奇怪的事情.我真的很感激,如果有人能够阐明我为什么要从我的计划中面对这样的行为.

package Programs;

public class FloatTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        float f1 = (float) 3.2;
        float f2 = (float) 6.5;
        if (f1 == 3.2) {
            System.out.println(f1 + " same");
        } else {
            System.out.println(f1 + " different");
        }
        if (f2 == 6.5) {
            System.out.println(f2 + " same");
        } else {
            System.out.println(f2 + " different");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

3.2 different
6.5 same
Run Code Online (Sandbox Code Playgroud)

在做了一些改变f2值的测试后,我注意到f2> 3.5得到意想不到的结果为什么会这样?任何输入都非常感谢.

谢谢

Sur*_*eon 5

我将尝试为此进行技术解释.由于这些值最终以二进制格式存储,因此在某些条件下精度将会丢失.

6.5不应该失去任何精度,因为它可以转换为二进制值110.1.

3.2但是,不能像这样干净地转换,因为二进制表示.2变得不合理.这将是一些东西11.00110011...这只能在最好的情况下四舍五入到3.2以另一种方式转换时.

如果有人能够验证我在说什么,那就太棒了 - 这是基于对Java如何处理这个问题的公认有限的知识.