1

数学の問題があります。丸めたい不合理な BigDecimal がありますが、それが理にかなっている場合は、繰り返しを開始した後に丸めたいと思います。たとえば、私が持っていた場合

0.76489512147147147147147147147147

に丸めたい

0.76489512147

残りは単に 147 繰り返されるためです。

これを行う Java 機能はありますか? それとも、ある種のアルゴリズムを実装する必要がありますか?

ありがとう

4

2 に答える 2

1

この問題は、出力を文字列として扱い、正規表現カンフーを適用することで簡単に解決できます。

// 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
于 2013-04-29T23:29:23.127 に答える
1

あなたが与えた例の数は実際には有理数です - 無理数 (例: pi または 2 の平方根) は決して繰り返されません。

0.764895121[47]-repeating のような数値を正確に表現できるRationalクラスを持つJScienceライブラリを使用できます。

于 2013-04-25T01:10:47.540 に答える