2012-12-13 76 views
1

如果兩個雙值(A和B),其雙#doubleToLongBits的(雙)值排序

  1. 不都是負
  2. 兩者不是NaN也沒有任何(POSITIVE|NEGATIVE)_INFINITY
  3. 一個> = B

是否總是真的

  1. Double.doubleToLongBits(a)> = Double.doubleToLongBits(b)

是否有任何可能的錯誤每IEEE 754的東西?

我打算將兩個正數(非零)整數的比率值作爲長整數值存儲,而不是雙倍數值。

@Entity 
public class ExchangeRate { 

    @PrePersist 
    protected void prePersist() { 
     targetAmountPerSourceAmount = Double.doubleToLongBits(
      (double) targetAmount/(double) sourceAmount); 
    } 

    @Basic 
    private long targetAmountPerSourceAmount; 

    @Min(1) 
    @Max(Short.MAX_VALUE) 
    private short targetAmount; 

    @Min(1) 
    @Max(Short.MAX_VALUE) 
    private short sourceAmount; 
} 

回答

2

好吧,零點會引起你的問題,因爲+0.0 == -0.0但他們有不同的表示。

double a = -0.0; 
    double b = +0.0; 
    System.out.println("a == b? " + (a == b)); // true 
    long aLong = Double.doubleToLongBits(a); 
    long bLong = Double.doubleToLongBits(b); 
    System.out.println("a' >= b'? " + (aLong >= bLong)); // false