[英]Round non-terminating (irrational) BigDecimal properly
我有一個數學問題。 我有一個不合理的BigDecimal,我想四舍五入,但是如果有意義的話,我想在它開始重復自身后對其進行四舍五入。 例如,如果我有
0.76489512147147147147147147147147
我希望它四舍五入
0.76489512147
其余的只會重復147次。
有Java功能可以做到這一點嗎? 還是我需要實現某種算法?
謝謝
通過將輸出視為字符串並應用一些正則表達式功夫,可以輕松解決此問題:
// 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.