2017-08-09 38 views
0

標題說明了一切:如何在Java中將浮點數除以BigInteger?我不需要部門的小數部分,它可以是舍入或截斷(但我會感興趣哪一個適用)。如何通過Java中的double來劃分BigInteger?

的「明顯的」甚至不編譯:

BigInteger x = BigInteger.valueOf(73).pow(42); 
BigInteger y = x.divide(Math.PI); // The method divide(BigInteger) in the type BigInteger is 
            // not applicable for the arguments (double) 
System.out.println(y); 

我預計中的一種:

BigInteger y = new BigDecimal(x).divide(BigDecimal.valueOf(Math.PI)).toBigInteger(); 

不幸,它提供了一個ArithmeticException非十進制擴展;沒有確切的可表示的小數結果。這是π,當然真正的...

當然,這一個工程,但它是太慢...

BigInteger y = BigInteger.valueOf(-1); 
BigDecimal σ = BigDecimal.ZERO; 
while(σ.compareTo(new BigDecimal(x)) < 0) { 
    y = y.add(BigInteger.ONE); 
    σ = σ.add(BigDecimal.valueOf(Math.PI)); 
} 

什麼是正確的,規範的方法?

+0

https://stackoverflow.com/questions/10637232/how-can-i-divide-properly-using-bigdecimal – Reimeus

回答

3

您必須添加RoundingMode來劃分功能,除非Java不知道如何圓的劃分,讓您ArithmeticException

BigInteger y = new BigDecimal(y).divide(BigDecimal.valueOf(Math.PI), RoundingMode.HALF_UP).toBigInteger(); 

所有四捨五入類型在上面的文檔鏈接很好的解釋。

+1

我同意,一個簡單的方法來獲得* one *的可能解決方案。併爲我的答案留下「空間」;-) – GhostCat

+1

如果您不打算解釋每種舍入模式實際上做了什麼,也許只是使用'RoundingMode.HALF_UP'作爲標準更明智,因爲這是大多數人熟悉? –

+0

@ AlvinL-B你是對的謝謝,編輯! – amicoderozer

相關問題