数学の問題があります。丸めたい不合理な BigDecimal がありますが、それが理にかなっている場合は、繰り返しを開始した後に丸めたいと思います。たとえば、私が持っていた場合
0.76489512147147147147147147147147
に丸めたい
0.76489512147
残りは単に 147 繰り返されるためです。
これを行う Java 機能はありますか? それとも、ある種のアルゴリズムを実装する必要がありますか?
ありがとう
数学の問題があります。丸めたい不合理な 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