java浮点数,-0.0小于+0.0

By | 27 8 月, 2018

说明: 任何数值类型,包括浮点数,0前面带个+号,表示正零,它和没+号的0完全相等。

但是0前面带个减号(-),表示负零,它和正零相等吗?下面的代码,分别对byte,short,int,long,float,double的-0和+0比较:

System.out.println("Byte: " + Byte.compare((byte) -0, (byte) +0));
System.out.println("Short: " + Short.compare((short) -0, (short) +0));
System.out.println("Intger: " + Integer.compare(-0, +0));
System.out.println("Long: " + Long.compare(-0, +0));
System.out.println("Float: " + Float.compare(-0f, +0f));
System.out.println("Double: " + Double.compare(-0d, +0d));

Print输出:

Byte: 0
Short: 0
Intger: 0
Long: 0
Float: -1
Double: -1

结果显示,byte,short,int,long的-0与+0相等,然而float和double的-0小于+0。这点在构造range时,[0.0, –0.0],意思表示只能取0,但是逻辑上是错的,因为左边比右边大,例如调用com.google.common.collect.Range.closed(0.0, -0.0)构造Range就会抛IllegalArgumentException。