格式化双精度字符串?

时间:2019-10-07 10:06:17

标签: java android kotlin

String.format(“%,. 0f”,200000000000000000000000.0)

-> 199,999,999,999,999,980,000,000 为什么?

3 个答案:

答案 0 :(得分:0)

了解Double Data类型-它是数量和比例的近似值。

以下任务:

double d = 2.00000000000f;

在打印时有时会生成1.9999999的值。您在这里看到的是放大倍数。 Double数据类型还具有最大数目(取决于实现),它们可以支持多少个重要位置(通常最多15个)-这就是为什么后6位全为零(0)

对于您的特定解决方案,如果您不需要浮点数据,请坚持使用Integer。

答案 1 :(得分:0)

这是因为如果使用默认数据类型,则当前处理器(和大多数VM)的工作方式与之类似。 Here进行了详细说明

如果您想精确使用BigDecimal。此类专门用于此类情况-用于与货币有关的事物和科学计算。

以Java具有DecimalFormat的正确方式格式化小数

String pattern = "###,###.###";
DecimalFormat decimalFormat = new DecimalFormat(pattern);

String format = decimalFormat.format(123456789.123);
System.out.println(format); // -> 123.456.789,123

Here是关于它的不错的教程

希望有帮助。

答案 2 :(得分:0)

我的问题已经解决

String.format(“%,. 0f”,BigDecimal(200000000000000000000000.0,MathContext.DECIMAL64))