【问题标题】:String to double conversion with 2 decimal places字符串到带有 2 个小数位的双重转换
【发布时间】:2016-09-15 16:39:46
【问题描述】:

我正在使用以下代码来格式化双精度值。 例如,如果输入为34,则输出双精度值应为34.00

Double value = new Double(34);
DecimalFormat decimalFormat =new DecimalFormat();
decimalFormat.applyPattern("#.00");
System.out.println("String format " + decimalFormat.format(value));
double formattedValue =Double.valueOf(decimalFormat.format(value));
System.out.println("double format " + formattedValue);

这里输出:

字符串格式 34.00
双格式 34.0

我不想使用BigDecimal

这里我们的最终要求是将格式化的值存储在双类型字段中。

【问题讨论】:

  • double 值没有“格式”。
  • 您以数字形式存储您的值。 double 不保留有效数字,因此无论字符串中有多少个数字,打印出来时仍然会得到 34.0。打印时必须重新格式化双精度。
  • 不要将其分配给 formattedValue。打印 decimalFormat.format(value) 本身(如@Reimeus 所示)
  • 嘿,谢谢。这里的要求是将格式化的值存储在双字段中。

标签: java decimalformat


【解决方案1】:

double 可以格式化为“任何”类型的 String,正如您在第一个示例中看到的那样,但 double 在内部没有格式(至少可以修改)。这就是为什么你不能让你的第二行打印34.00,无论你做什么,而不将它转换为String

【讨论】:

    【解决方案2】:

    嗯,我的意思是,总是有很好的旧 printf...

    System.out.printf("value is %.0f\n", value);
    

    或者类似的:

    String formatted = String.format("%.0f", value);
    

    重申其他 cmets:double 是 double。它没有固有的显示格式。格式化它取决于你如何显示它。

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 1970-01-01
      • 2011-06-12
      • 2014-09-08
      • 2018-06-04
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多