2012-04-30 97 views
7

如何使用BigDecimal提取小數點後的數字?BigDecimal中的提取數小數點

BigDecimal d = BigDecimal.valueOf(1548.5649);

結果:僅提取物:5649

+2

注意:您應該使用'BigDecimal.valueOf( 「1548.5649」);',而不是因爲double'之間'轉換和'BigDecimal'會導致奇怪的副作用。如果你需要精確度,避免'double'和'float'。 –

+1

@AaronDigulla我認爲你的意思是新的BigDecimal(「1548.5649」),因爲沒有BigDecimal.valueOf(String)方法。 –

回答

10

嘗試:

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal result = d.subtract(d.setScale(0, RoundingMode.FLOOR)).movePointRight(d.scale());  
System.out.println(result); 

打印:如果該值爲負

5649 
6

嘗試BigDecimal.remainder

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal fraction = d.remainder(BigDecimal.ONE); 
System.out.println(fraction); 
// Outputs 0.5649 
+0

它的顯示:1548.564900000000079671735875308513641357421875 – Mehdi

+1

它爲我顯示'0.5649'。 –

+0

是的,這是真的:) 謝謝;) – Mehdi

4

這應該做的伎倆:

d.subtract(d.setScale(0, RoundingMode.FLOOR)); 

setScale()回合數爲零小數位,儘管它的名字,不會改變d的值。

+0

它的工作......謝謝:) – Mehdi

-1

嘗試使用d.doubleValue()獲得雙重價值

+2

它返回相同的數字:1548.5649 – Mehdi

0

你不知道哪個鍵入要作爲一個結果。最簡單的方法可能是通過BigDecimal轉換成字符串,並採取子:

String s = d.toPlainString(); 
int i = s.indexOf('.'); 
if (i < 0) { 
    return ""; 
} 
return s.substring(i + 1); 
+0

這隻適用於使用的語言環境。作爲小數點分隔符。但有些地區正在使用,。 – BetaRide

+0

@BetaRide:我知道,我講法語,逗號在這裏使用。但BigDecimal.toPlainString()不支持本地感知。無論區域設置如何,它都使用小數點作爲小數點分隔符。 –

1

,使用d.subtract(d.setScale(0, RoundingMode.FLOOR))將返回一個錯誤的小數。

使用此

BigInteger decimal = 
       d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger(); 

它返回56491548.5649-1548.5649

相關問題