java如何显示浮点数的附加数字?
我有一个Double是我这样创建的:
Double d = Double.parseDouble( "27.86753" ); // All the digits of this double value are 27.867530822753906
这个特殊的双精度也可以用浮点表示,所以Java会删除我的其余数字。如何强制Java给出这个值的真正的双精度表示(所有数字)
你可以在下面搜索框中键入要查询的问题!
我有一个Double是我这样创建的:
Double d = Double.parseDouble( "27.86753" ); // All the digits of this double value are 27.867530822753906
这个特殊的双精度也可以用浮点表示,所以Java会删除我的其余数字。如何强制Java给出这个值的真正的双精度表示(所有数字)
# 1 楼答案
哦,伙计,真有趣。您想确切地了解
double
如何不准确地执行我认为
new BigDecimal(double).toString()
会给出所有不正确的数字,因为BigDecimal
表示具有精确指定精度的数字编辑:哦,我想我知道发生了什么
让我试着这样解释:
Double.toString
返回最不精确的String
,这样Double.parseDouble
将返回完全相同的double
只足够的数字来“唯一地标识”准确的IEEE 754值,尽管实际值可能比打印的数字多。仅仅因为Double.toString
没有给你期望的那么多数字并不意味着实际IEEE 754双精度值被舍入到那么多数字new BigDecimal(double).toString
将返回存储的准确IEEE-754值更新:
所发生的是,当它打印出更精确的值。这仅仅是因为
27.86753
时,它实际上在内部是一个比您引用的正确答案^{toString
被设计成只打印尽可能多的内容,以确保Double.parseDouble(Double.toString(value))
是不可操作的我运行了以下代码:
}
然后打印出来
事实上,第二个值明显接近27.86753,大约0.0000008
# 2 楼答案
您可能想考虑使用<强> ^ {}/St>您有明确的方法来控制比例和舍入规则。你不能用双份的
# 3 楼答案
丑陋但有效: