[英]Java loss of precision with large double
double lnumber = Math.pow(2, 1000);
打印1.0715086071862673E301
我尝试过的事情
我试图通过使用BigDecimal类扩展此数字:
String strNumber = new BigDecimal(Double.toString(lnumber)).toPlainString();
这只是打印:
10715086071862673000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我也尝试使用DecimalFormat:
DecimalFormat df = new DecimalFormat("#");
df.setMaximumFractionDigits(0);
String strNumber = String.valueOf(df.format(lnumber));
打印相同的东西:
10715086071862673000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
根据Wolfram Alpha的实际答案是
如何打印所有实际值?
您不能像这样混合和匹配Math,原始类型和BigDecimal,如果要获得真正的精度,请仅使用BigDecimal:
BigDecimal value = new BigDecimal(2);
System.out.println(value.pow(1000));
如果要查看double的实际值,请使用BigDecimal(double)构造函数。 Double.toString(lnumber)
舍入。
System.out.println(new BigDecimal((Math.pow(2, 1000))))
2,1000 System.out.println(new BigDecimal((Math.pow(2, 1000))))
输出107150860718626732094842504906000181056140481170553360744375038837035105112493612219831983156958581275946729175531468251872852856923140435984577574698574834563456777482423547542654760768654768768768654768768654654768768654654768768654657768654654654768768654654768768654654654768654678654654654678758659654654654死状态死失
Math.pow(2,1000)可以用double精确表示,因为它是可表示范围内的2的幂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.