Java 正确四舍五入非终止(无理)BigDecimal

Java 正确四舍五入非终止(无理)BigDecimal,java,bigdecimal,Java,Bigdecimal,我有一道数学题。我有一个非理性的大十进制,我想四舍五入,但如果有意义的话,我想在它开始重复之后四舍五入。例如,如果我有 0.76489512147147 我想让它转过来 0.76489512147 因为剩下的只是147个循环 有没有Java功能可以做到这一点?或者我需要实现某种算法吗 谢谢您给出的示例数字实际上是有理数-无理数(例如π或2的平方根)永不重复 您可以使用这个库,它有一个类,可以精确地表示数字,如0.764895121[47]-重复。通过将输出视为字符串并应用一些正则表达式技巧,这个

我有一道数学题。我有一个非理性的大十进制,我想四舍五入,但如果有意义的话,我想在它开始重复之后四舍五入。例如,如果我有

0.76489512147147

我想让它转过来

0.76489512147

因为剩下的只是147个循环

有没有Java功能可以做到这一点?或者我需要实现某种算法吗


谢谢

您给出的示例数字实际上是有理数-无理数(例如π或2的平方根)永不重复


您可以使用这个库,它有一个类,可以精确地表示数字,如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

对不起,这个词错了。我应该说不终止。问题是我需要将数字输出到一个文件中,并且它需要尽可能小。但我会去图书馆看看。感谢编译器没有将这些数字视为一系列字符,而是