[英]Get all decimal places in a number after division
在評估此精度時,您失去了精度:
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.