2010-09-30 367 views

回答

-1
new BigDecimal(myfloat) 
+4

沒有浮動的構造,這是自動強制轉換爲雙,和雙構造函數是不安全的 – Alex 2012-11-08 16:36:22

-2

使用float構造:

float f = 10.0f; 
BigDecimal b = new BigDecimal(f); 
+7

沒有浮點構造函數,這是自動轉換爲雙精度,並且雙精度構造函數不安全 – Alex 2012-11-08 16:35:42

35
BigDecimal value = new BigDecimal(Float.toString(123.4f)); 

javadocs,字符串構造一般是一個float轉換成一個BigDecimal的首選方法,因爲它不會從遭受BigDecimal(double)構造函數的不可預測性。從文檔

引用:

注意:對於值其他浮點和雙精度的NaN和±無窮遠,此構造是通過Float.toString(浮點)和Double.toString返回的值兼容(雙)。 這通常是將float或double轉換爲BigDecimal的首選方式,因爲它不會受到BigDecimal(double)構造函數的不可預測性的影響。

+4

但是明確地將「float」轉換爲String並不能幫助您自動解決不可預測性問題 - 您需要注意正確格式化值(四捨五入) TC)。 – Jesper 2010-09-30 08:58:08

8

對於3位的小數點後的精度:

BigDecimal value = new BigDecimal(f, 
     new MathContext(3, RoundingMode.HALF_EVEN)); 
13
float f = 45.6f; 
BigDecimal bd = BigDecimal.valueOf(f); 

引用從單證:

注意:這通常是轉換雙倍的優選方式(或 浮點數)轉換爲BigDecimal,因爲返回的值等於從構造產生的 從使用 Double.toString(double)的結果中得到一個BigDecimal。

參考:BigDecimal (Java Platform SE 6)

+0

'Double.toString(float)'產生與'Float.toString(float)'不同的結果。 – 2017-01-24 13:12:14

1

這是高達我的知識:

public static BigDecimal floatToBigDecimal(Float a){ 


    if(a == null || a.isInfinite() || a.isNaN()){ 
     return BigDecimal.ZERO; 
    } 
    try{ 
     return BigDecimal.valueOf(a); 

    }catch(Exception e){ 
     return BigDecimal.ZERO; 
    } 

} 

*注:這通常是轉換一個雙(或浮動)轉換爲BigDecimal,作爲首選方式返回的值等於從使用Double.toString(double)的結果構造BigDecimal所產生的值。

公共靜態的BigDecimal的valueOf(double val)將

參數
VAL - 雙轉換爲一個BigDecimal。
返回
一個BigDecimal,其值等於或近似等於val的值。
拋出:
NumberFormatException的 - 如果val爲無窮大或NaN。
由於:
1.5

我已經檢查是否無限大,不是一個數字,所以有NumberFormatException異常的機會少