以下代码打印 12113411122222,545000
:
Double value = 12113411122222.545421d;
System.out.println(String.format("%f", value));
如何确定变量的精确值 value
被指定打印- 12113411122222.545421
?
更新:我应该在一开始就说这个-我知道 BigDecimal
需要精度时需要使用。然而,我使用的是一个库,它读取某种类型的文件,其结果是我从该文件中获得了一堆属性。其中一个属性作为double从第三方库传递给我。之后,我将属性值发送到数据库,结果属性值被保存为 1.2113411122222545E13
因为值正在转换为 String
. 所以现在我在寻找一个解决方案,如何“失去”指数部分,并作出假设:如果 Double.MAX_VALUE
是 1.7976931348623157E308
例如,这意味着我可能会得到包含大量十进制数的属性值 12113411122222.545421121212212d
,如何转换 Double
至 String
不会失去任何数字。我怀疑这是一个问题 Double
但这是违反直觉的,因为 Double.MAX_VALUE
是 1.7976931348623157E308
. 我想更好地了解java的内部工作和计算机系统中的数字是理解这个问题的必要条件。
1条答案
按热度按时间7lrncoxx1#
您使用了错误的数据类型。使用double不能在小数点分隔符后存储那么多数字。你应该去喝一杯
BigDecimal
编辑:我希望我能帮助你。