【问题标题】:Formatting big decimal格式化大十进制
【发布时间】:2015-05-18 09:06:21
【问题描述】:

我有一个大的小数点:                      -6
我需要对其进行格式化以获得:     -000000006.00
如果我的大小数是6,结果将是:0000000006.00

我正在尝试使用String.format,但我无法获得该结果。

String.format("%010d", invoice.getAmount().doubleValue());

如何格式化我的大小数以获得所需的结果?

【问题讨论】:

  • 请向我们展示您的代码?
  • 让我猜猜,你也得到一个例外?使用f 而不是d

标签: java bigdecimal


【解决方案1】:
String result = String.format("%013.2f", invoice.getAmount());

请注意,用于小数点的符号是特定于语言环境的;例如,您可能会得到, 而不是.。如果您需要它始终为点.,则指定小数点为点的区域设置,例如:

String result = String.format(Locale.US, "%013.2f", invoice.getAmount());

【讨论】:

    【解决方案2】:

    检查DecimalFormat 类:

    BigDecimal bg = new BigDecimal(-6);
    DecimalFormat df = (bg.signum() < 0) ? new DecimalFormat("000000000.00") : new DecimalFormat("0000000000.00");
    System.out.println(df.format(bg));
    

    产量:

    -000000006.00
    0000000006.00
    

    【讨论】:

    • .doubleValue() 没有必要,也不应该这样做,因为它可能会引入舍入错误。只需将BigDecimal 直接传递给format
    • 具有正值的版本应该包含一个额外的零,因此两个结果将具有完全相同的“长度”。至少在 OP 示例中就是这种情况。我更喜欢你目前的结果。
    • @Tom:感谢您的澄清。
    【解决方案3】:

    如果您想使用String.format(),您可以使用“+”来包含符号:

    String.format("%+010d", -6) 
    

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多