我有一个数学问题。我有一个不合理的 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