簡體   English   中英

除后得到一個數字中的所有小數位

[英]Get all decimal places in a number after division

我目前正在使用BigDecimal,它為我提供了更多小數點,但不足以執行我想做的事情。 我需要能夠一路攀升至10 ^ 6位數。 這是我當前的代碼

BigDecimal num = new BigDecimal(103993/33102.0);
    pw.println(num.toString());

它輸出3.14159265301190249175533608649857342243194580078125

該數字實際上有更多的小數位: http ://www.wolframalpha.com/input/?i = 103993%2F33102

在評估此精度時,您失去了精度:

103993/33102.0

作為一個雙重師。 實際上,以下內容:

BigDecimal num = new BigDecimal(103993/33102.0);

等價於:

double d = 103993/33102.0;
BigDecimal num = new BigDecimal(d);

而是使用:

int scale = 100;
BigDecimal num1 = new BigDecimal(103993);
BigDecimal num2 = new BigDecimal(33102);
System.out.println(num1.divide(num2, scale, RoundingMode.HALF_UP).toString());

輸出:

3.1415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737296840070086399613316415926530119026040722614947737

問題是您如何撥打電話。 在參與BigDecimal類之前,將103993/33102.0評估為雙精度浮點表達式( double )。 您應該創建單獨的BigDecimal對象,並使用BigDecimal.divide獲取所需的數字。

由於您需要精確的結果,因此我可能會在開始時將兩個數字都作為整數傳遞。

即使這樣做,我仍然懷疑您是否能夠使用10 ^ 6位數。 您可能需要實現自己的除法算法,以達到該級別,因為任意精確度數學運算的任何明智實現都將在該點之前很長時間停止(至少默認情況下如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM