簡體   English   中英

正確舍入非終止(非理性)BigDecimal

[英]Round non-terminating (irrational) BigDecimal properly

我有一個數學問題。 我有一個不合理的BigDecimal,我想四舍五入,但是如果有意義的話,我想它開始重復自身對其進行四舍五入。 例如,如果我有

0.76489512147147147147147147147147

我希望它四舍五入

0.76489512147

其余的只會重復147次。

有Java功能可以做到這一點嗎? 還是我需要實現某種算法?

謝謝

您給出的示例數字實際上是有理數的-無理數(例如pi或2的平方根)永遠不會重復。

您可以使用JScience庫,該庫具有一個Rational類,該類可以精確地表示0.764895121 [47]-重復的數字。

通過將輸出視為字符串並應用一些正則表達式功夫,可以輕松解決此問題:

// Replace the smallest repeating trailing group with 1 copy of itself
String truncated = a.replaceAll("(.+?)(?=\\1+$).*", "$1");

這是一些測試代碼:

BigDecimal bd = new BigDecimal("0.76489512147147147147147147147147");
String s = bd.toString();
// Replace the smallest repeating trailing group with 1 copy of itself
String truncated = s.replaceAll("(.+?)(?=\\1+$).*", "$1");
System.out.println(truncated);

輸出:

0.76489512147

暫無
暫無

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

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