2012-12-16 61 views
38

我有一個BigDecimal對象,我想將其轉換爲字符串。 的問題是,我的價值得到了分數,我也得到一個龐大的數字(長),我只需要原來的數字符串,例如: 爲BigDecimal到字符串

BigDecimal bd = new BigDecimal(10.0001) 
System.out.println(bd.toString()); 
System.out.println(bd.toPlainString()); 

輸出爲:

10.000099999999999766941982670687139034271240234375 
10.000099999999999766941982670687139034271240234375 

,我需要出去投入是完全數字10.0001字符串

回答

81

爲了得到準確10.0001您需要使用String構造或valueOf(其構建了基於雙的規範表示的BigDecimal):

BigDecimal bd = new BigDecimal("10.0001"); 
System.out.println(bd.toString()); // prints 10.0001 
//or alternatively 
BigDecimal bd = BigDecimal.valueOf(10.0001); 
System.out.println(bd.toString()); // prints 10.0001 

new BigDecimal(10.0001)的問題是,所述參數是一個double和它發生雙打不能代表10.0001準確。因此10.0001被「轉換」爲最接近的可能的雙倍數,即10.000099999999999766941982670687139034271240234375,這就是您的BigDecimal所示。

因此,使用雙重構造函數很少有意義。

你可以閱讀更多關於它在這裏,Moving decimal places over in a double

+0

的更有效的方法通過這種方式轉換'double'就是使用'BigDecimal.valueOf(double);' –

+0

@PeterLawrey不知道我明白。 'BigDecimal.valueOf(double)''以相同的方式將double轉換爲「double」,打印時會變成四捨五入,這使用了一些複雜的規則,所以我不確定如何依賴它。 – assylias

+0

'使用Double.toString(double)方法提供的double的規範字符串表示形式將double翻譯爲BigDecimal。 注意:這通常是將double(或float)轉換爲BigDecimal的首選方式,因爲返回值等於從使用Double.toString(double)結果構造BigDecimal所產生的值。# –

8

BigDecimal不包含數字10.0001,因爲你有double初始化它,並且double沒有相當包含數字,你認爲它沒有。 (這是BigDecimal整點)。

如果使用the string-based constructor代替:

BigDecimal bd = new BigDecimal("10.0001"); 

...那麼它實際上將包含您所期望的數量。

0

BigDecimal不能是雙精度。 你可以使用Int號碼。 如果要顯示自己的編號,可以使用BigDecimal的String構造函數。

這樣的:

BigDecimal bd1 = new BigDecimal("10.0001"); 
現在

,可以顯示BD1爲10.0001

那麼簡單。 好運。

5

通過使用下面的方法,您可以將java.math.BigDecimal轉換爲String。

BigDecimal bigDecimal = new BigDecimal("10.0001"); 
    String bigDecimalString = String.valueOf(bigDecimal.doubleValue()); 
    System.out.println("bigDecimal value in String: "+bigDecimalString); 

輸出:在字符串
BIGDECIMAL值:10。0001

1
// Convert BigDecimal number To String by using below method // 

public static String RemoveTrailingZeros(BigDecimal tempDecimal) 
{ 
    tempDecimal = tempDecimal.stripTrailingZeros(); 
    String tempString = tempDecimal.toPlainString(); 
    return tempString; 
} 

// Recall RemoveTrailingZeros 
BigDecimal output = new BigDecimal(0); 
String str = RemoveTrailingZeros(output); 
0

要存檔雙構造的必然結果,你需要前圓BigDecimal在將其轉換爲字符串如

新的java.math.BigDecimal(10.0001).round(新java.math.MathContext中(6,java.math.RoundingMode.HALF_UP))。的toString()

將打印 「10.0001」

0

爲了更好地支持不同的地區用這種方式:

DecimalFormat df = new DecimalFormat(); 
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(0); 
df.setGroupingUsed(false); 

df.format(bigDecimal); 

還可以自定義它:

DecimalFormat df = new DecimalFormat("###,###,###"); 
df.format(bigDecimal); 
相關問題