首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆不终止(非理性) BigDecimal

圆不终止(非理性) BigDecimal
EN

Stack Overflow用户
提问于 2013-04-25 01:05:59
回答 2查看 715关注 0票数 1

我有一道数学题.我有一个非理性的BigDecimal,我想绕开它,但是如果这有意义的话,我想在它开始重复之后对它进行循环。所以,例如,如果我有

0.76489512147147147147147147147147

我希望它能转到

0.76489512147

剩下的只会重复147次。

是否有Java功能来做到这一点?或者我需要实现某种算法?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-29 23:29:23

这个问题很容易解决,只要把输出当作字符串,并应用一些正则表达式:

代码语言:javascript
复制
// Replace the smallest repeating trailing group with 1 copy of itself
String truncated = a.replaceAll("(.+?)(?=\\1+$).*", "$1");

下面是一些测试代码:

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
0.76489512147
票数 1
EN

Stack Overflow用户

发布于 2013-04-25 01:10:47

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

您可以使用JScience库,它有一个理性类,它可以精确地表示像0.76489512147重复这样的数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16204775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档