2010-07-12 35 views

回答

-1

所以我最終做出了兩個功能,一個用於旋轉雙打,另一個用於浮動。看起來像一個PITA,但其他然後被限制在一個預設的精度水平(我將看看做一個應用程序設置)它確實有效。

public static float fRound(float Rval, int Rpl) { 
    float p = (float)Math.pow(10,Rpl); 
    Rval = Rval * p; 
    float tmp = Math.round(Rval); 
    return (float)tmp/p; 
} 
public static Double dRound(double d, int decimalPlace){ 
    BigDecimal bd = new BigDecimal(Double.toString(d)); 
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP); 
    return bd.doubleValue(); 
} 
5

0.4不能完全用32位IEEE-754浮點數表示。請參閱:

如果你絕對需要任意精度的使用BigDecimal。不過,任意精度數學運算速度較慢。或者使用64位數學(雙打)來提高精度。

+0

在這種情況下雙打併沒有太大的區別。雖然我無法在Android的Math lib中找到變精確四捨五入的函數,但我確實拼湊在一起。我只是不喜歡強迫結果進入特定的精確等級。更重要的是,我所做的數學例程有時會產生一個Double,有時候會產生一個Float。沒有找到一種乾淨的方式將所有結果強制爲一種格式。我對BigDecimal不熟悉。很難理解它的用法。 – Kujako 2010-07-12 06:31:32

+0

@Kujako:我不確定我是否理解這個問題。 IEEE-754是我認識的所有CPU實現的一個標準,你必須處理它。 – 2010-07-12 12:40:52

+0

是的,自從我與Java合作以來,這只是一段時間。忘記了一些這些煩惱。儘管如此,我在回覆/回答中詳述的功能確實解決了這個問題。 – Kujako 2010-07-12 17:43:20

0

浮點數是一個近似數字系統,在你的情況下,0.4不能完全用浮點數表示,所以它表示儘可能接近,所以你不會得到預期的結果。

是否有可用於Android的Round功能?