圆形非终止(无理)BigDecimal正确

时间:2013-04-25 01:06:00

标签: java bigdecimal

我有一个数学问题。我有一个非理性的BigDecimal,我想要完善但是我想在之后它开始重复自己,如果这是有道理的。所以,例如,如果我有

0.76489512147147147147147147147147

我希望它能够转到

0.76489512147

其余的只是147经常发生。

是否有Java功能可以执行此操作?或者我需要实现某种算法?

由于

2 个答案:

答案 0 :(得分:1)

您给出的示例数字实际上是合理的 - 无理数(例如pi或2的平方根)从不重复。

您可以使用JScience库,其Rational类可以精确地表示数字,如0.764895121 [47] - 重复。

答案 1 :(得分: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