Java:显示精度为30的浮点数

时间:2013-06-15 13:00:42

标签: java double arbitrary-precision

我正在尝试用一些算法来计算PI,但主要的是以30的精度显示它。我试图输出一个带有format等的字符串。但它似乎是{{的最大精度1}}是15.是否有任何课程或方法可以帮助我解决这个问题?

我已经尝试过了:

double

4 个答案:

答案 0 :(得分:3)

虽然JDK有BigDecimal,但遗憾的是你没有.sqrt()

这意味着您最好的选择是使用apfloat

final Apfloat f1 = new Apfloat(640320);
final Apfloat f2 = ApfloatMath.pow(f1, 3L);
final Apfloat f3 = f2.add(new Apfloat(744));
final Apfloat f4 = ApfloatMath.sqrt(new Apfloat(163), 1000L);
final Apfloat ret = ApfloatMath.log(f3.divide(f4));

System.out.println(ApfloatMath.round(ret, 30L, RoundingMode.HALF_DOWN));

你有一个较短的pi方式,但是;)

System.out.println(ApfloatMath.pi(30L));

答案 1 :(得分:1)

答案 2 :(得分:1)

我猜Float并不支持那么高的精度。你可以使用BigDecimal。

答案 3 :(得分:0)

double没有那么多精度。看看double type is implemented是怎么回事。对于任意精度,请查看BigDecimal

例如:

BigDecimal bd = new BigDecimal(22.0/7.0);
df.setMaximumFractionDigits(30);
System.out.println(df.format(bd));