如何精确地打印双精度值?

fae0ux8s  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(240)

以下代码打印 12113411122222,545000 :

Double value = 12113411122222.545421d;
System.out.println(String.format("%f", value));

如何确定变量的精确值 value 被指定打印- 12113411122222.545421 ?
更新:我应该在一开始就说这个-我知道 BigDecimal 需要精度时需要使用。然而,我使用的是一个库,它读取某种类型的文件,其结果是我从该文件中获得了一堆属性。其中一个属性作为double从第三方库传递给我。之后,我将属性值发送到数据库,结果属性值被保存为 1.2113411122222545E13 因为值正在转换为 String . 所以现在我在寻找一个解决方案,如何“失去”指数部分,并作出假设:如果 Double.MAX_VALUE1.7976931348623157E308 例如,这意味着我可能会得到包含大量十进制数的属性值 12113411122222.545421121212212d ,如何转换 DoubleString 不会失去任何数字。我怀疑这是一个问题 Double 但这是违反直觉的,因为 Double.MAX_VALUE1.7976931348623157E308 . 我想更好地了解java的内部工作和计算机系统中的数字是理解这个问题的必要条件。

7lrncoxx

7lrncoxx1#

您使用了错误的数据类型。使用double不能在小数点分隔符后存储那么多数字。你应该去喝一杯 BigDecimal 编辑:

String number = "12113411122222.545421";
BigDecimal value = new  BigDecimal(number);
System.out.println(String.format("%f", value));

我希望我能帮助你。

相关问题