我有一道数学题.我有一个非理性的BigDecimal,我想绕开它,但是如果这有意义的话,我想在它开始重复之后对它进行循环。所以,例如,如果我有
0.76489512147147147147147147147147
我希望它能转到
0.76489512147
剩下的只会重复147次。
是否有Java功能来做到这一点?或者我需要实现某种算法?
谢谢
发布于 2013-04-29 23:29:23
这个问题很容易解决,只要把输出当作字符串,并应用一些正则表达式:
// 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-25 01:10:47
您给出的示例数实际上是有理数--无理数(例如pi或2的平方根)永不重复。
您可以使用JScience库,它有一个理性类,它可以精确地表示像0.76489512147重复这样的数字。
https://stackoverflow.com/questions/16204775
复制相似问题