【问题标题】:Formatting Double to String? [duplicate]将双精度格式化为字符串? [复制]
【发布时间】:2020-02-04 14:53:20
【问题描述】:

String.format("%,.0f", 200000000000000000000000.0)

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

【问题讨论】:

标签: java android kotlin


【解决方案1】:

了解 Double 数据类型 - 它是数量和规模的近似值。

以下作业:

double d = 2.00000000000f;

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

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

【讨论】:

  • 但是当我尝试它时,它被缩放了 21 个零(0)
【解决方案2】:

这是因为如果使用默认数据类型,当前的处理器(和大多数虚拟机)会这样工作。 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 是一个很好的教程

希望对你有帮助。

【讨论】:

  • 仍然是值 200000000000000000000000.0
  • @LongNguyenVan with DecimalFormat - 是的,因为如果使用与您相同的双精度 - 我展示它只是为了展示如何在 java 中正确格式化小数。对大数字使用 BigDecimal - 您可以使用此类控制舍入。
  • 感谢使用 BigDecimal 和 MathContext
  • @Long Nguyen Van 如果回答正确,请采纳
【解决方案3】:

我的问题已经解决了

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

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 2023-03-03
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多