我正在编写一个带浮动的示例程序,但突然发生了一些奇怪的事情.我真的很感激,如果有人能够阐明我为什么要从我的计划中面对这样的行为.
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得到意想不到的结果为什么会这样?任何输入都非常感谢.
谢谢
我将尝试为此进行技术解释.由于这些值最终以二进制格式存储,因此在某些条件下精度将会丢失.
6.5不应该失去任何精度,因为它可以转换为二进制值110.1.
3.2但是,不能像这样干净地转换,因为二进制表示.2变得不合理.这将是一些东西11.00110011...这只能在最好的情况下四舍五入到3.2以另一种方式转换时.
如果有人能够验证我在说什么,那就太棒了 - 这是基于对Java如何处理这个问题的公认有限的知识.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |