【问题标题】:Format double to 2 decimal places with leading 0s [duplicate]使用前导 0 将双精度格式设置为小数点后 2 位 [重复]
【发布时间】:2011-04-27 18:56:39
【问题描述】:

可能重复:
Round a double to 2 significant figures after decimal point

我正在尝试使用前导零格式化双至 2 位小数,但没有运气。 这是我的代码:

Double price = 32.0;
DecimalFormat decim = new DecimalFormat("#.##");
Double price2 = Double.parseDouble(decim.format(price));

我希望输出为32.00,而不是32.0
有什么解决办法吗??

【问题讨论】:

  • 既然您在这里处理货币,请考虑使用BigDecimal 来表示货币。使用浮点数可能会导致舍入问题。
  • 我确信在货币上有一百万个 SO 线程。我更喜欢整数而不是 BigDecimal,然后我用便士来处理。当然,这既不是这里也不是那里......
  • 您的代码不太正确(例如,您从未展示过如何获得输出)。您能否将您的程序更改为一个完整的工作程序(带有一个类和一个 main 方法)并告诉我们预期的输出?
  • new DecimalFormat("0.00").format(double-value);

标签: java double


【解决方案1】:

试试这个:

 DecimalFormat decim = new DecimalFormat("#.00");

【讨论】:

  • 试过了,但它不起作用..
  • 如果您已经在双打工作,这就是答案。我被派去追逐一个想法,将其转换为 BigDecimal,但这很简单而且效果很好。
  • 它不起作用:(
【解决方案2】:

OP 想要前导零。如果是这样的话,那么按照 Tofubeer:

    DecimalFormat decim = new DecimalFormat("0.00");

编辑:

请记住,我们在这里讨论的是格式化数字,而不是数字的内部表示。

    Double price = 32.0;
    DecimalFormat decim = new DecimalFormat("0.00");
    Double price2 = Double.parseDouble(decim.format(price));
    System.out.println(price2);

将使用默认格式打印price2。如果要打印格式化的表示,请使用以下格式打印:

    String s = decim.format(price);
    System.out.println("s is '"+s+"'");

从这个角度来看,我不认为你的parseDouble() 正在做你想做的事,也不能。

【讨论】:

  • 也试过了,还是不行
  • 它对我有用。贴一些示例数据和上面代码产生的结果。
  • 嘿,谢谢。上面的代码非常适合我。我意识到我犯了一个错误,将它再次转换为双倍,而实际上我只是没有打印它。再次感谢。
猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多