java浮点数使用二进制数据的科学计数法来表示浮点数,因此可能不能精确地表示一个浮点.
xx和yy直不一样是因为double代表双精度浮点数,占8个字节,64位。float只占4个字节,32位。
后面又输出XX跟前面不同,是因为?:是一个三元运算符,经过这个运算符,精度改变了。- float xx = (2.0f-1.1f);
- double yy = (2.0-1.1);
- System.out.println(xx+" "+yy);
- System.out.println( yy > xx);
- System.out.println(0>xx ? yy : (float)xx);
复制代码 看看输出了什么;- 0.9 0.8999999999999999
- true
- 0.8999999761581421
复制代码 我猜测,通过?:运算符,还原了float类型的实际值,比它原本表示的,精确了一点。 |