xyz*_*xyz 7 java primitive operators
我遇到了一个奇怪的Java角落.(这对我来说似乎很奇怪)
double dd = 3.5;
float ff = 3.5f;
System.out.println(dd==ff);
Run Code Online (Sandbox Code Playgroud)
o/p:是的
double dd = 3.2;
float ff = 3.2f;
System.out.println(dd==ff);
Run Code Online (Sandbox Code Playgroud)
o/p:false
我观察到,如果我们比较任何两个值(如我在示例中提到的浮点数和双精度数)和.5OR,.0如3.5,234.5,645.0那么输出true即两个值相等,否则输出是false等于.
即使我试图制造方法strictfp但没有运气.我错过了什么.
Edw*_*uck 20
将无限多个实数压缩成有限数量的位需要近似表示....
---编辑显示上述报价的含义---
你不应该比较浮动或双打的平等; 因为,您无法保证分配给float或double的数字是准确的.
所以
float x = 3.2f;
Run Code Online (Sandbox Code Playgroud)
不会导致值为3.2的浮点数.它导致浮点值为3.2加上或减去一些非常小的误差.说3.19999999997f.现在应该明白为什么比较不起作用.
为了比较浮动的平等性,你需要检查值是否足够"接近"相同的值,就像这样
float error = 0.000001 * second;
if ((first >= second - error) || (first <= second + error)) {
// close enough that we'll consider the two equal
...
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
不同的是,3.5可表示正是在这两个float和double- 3.2,而不能准确地在两种类型的...代表和两个最接近的近似值是不同的.
想象一下,我们有两个固定精度的十进制类型,其中一个存储了4位有效数字,其中一个存储了8位有效数字,我们要求他们每个存储最接近"三分之一"的数字(但我们可能会这样做).然后一个人的值为0.3333,一个人的值为0.33333333.
float和之间的相等比较double首先将floata 转换为a double然后比较两者 - 这相当于将我们的"小十进制"类型中的0.3333转换为0.33330000.然后它会比较0.33330000和0.33333333的相等性,并给出错误的结果.
| 归档时间: |
|
| 查看次数: |
14352 次 |
| 最近记录: |