【问题标题】:Format double value?格式化双值?
【发布时间】:2014-06-30 14:58:01
【问题描述】:

我有以下代码行:

DecimalFormat df = new DecimalFormat("#.##"); 
System.out.println(df.format(23.00));
System.out.println(Double.parseDouble(df.format(23.00d)));
System.out.println(df.parse("23.00").doubleValue());

第一行打印 23 但在第二行和第三行,当我将其转换为双倍时,它会打印 23.0 。显示23.0 没有任何意义。

我如何获得double23

我检查了这些best-way-to-format-a-double-value-to-2-decimal-placeshow-to-nicely-format-floating-numbers-to-string-without-unnecessary-decimal-0

【问题讨论】:

  • 2323.0 是一回事。如果您想在没有.0 的情况下打印它,请使用第一行中的格式字符串。
  • 23 不是double23 是一个整数。 23.00double。如果第一行打印您想要的格式,为什么将输出解析为双精度并显示双精度?目前尚不清楚您要解决什么问题,因为答案就在您的问题之内。
  • 在第二行和第三行中,您将其转换回双精度(之前是字符串),因此 Java 将像往常一样打印它们。
  • 你已经拥有了这个价值。在最后两行中,您没有按照自己的意愿格式化值,您只是使用System.out.println(double x),它默认输出Double.toString(double d) 实现所描述的值
  • 你到底想要什么?将其打印为23,就像您在第一行中所做的那样,或者将其打印为23.00

标签: java


【解决方案1】:

在第二和第三行输出中,您只是有效地使用了Double.toStringdouble 值不记得它一开始是用什么格式解析的 - 它只是一个数值。

如果您想以特定方式格式化一个值,请使用df.format,就像您在第一个输出行中所做的那样。例如:

String text = ...; // Wherever you get the text from
double value = Double.parseDouble(text);
String formatted = df.format(value); // Using the df you set up before

【讨论】:

  • 你是说每次显示之前我都应该格式化23.0,这样它就会显示为23?我不能把它存储为23吗?
  • @Manish:除非您想将其存储为 int,否则您无法存储 23.5 等。再次重申:格式不是值的一部分。
  • 是的,但无论如何它会将23 存储为23.0 在数据库中。当我读回来时,它将是23.0,所以图片中的格式是23
  • @Manish:它根本不存储文本表示。它存储了一堆位 - 23、23.0、23.00 等相同的位。您的数据库如何存储它是另一回事。
  • @Manish:您应该使用 BigDecimal 而不是 double 作为货币值的开头。但无论哪种方式,您只需要了解当显示一个值时,您应该对其应用适当的格式。
【解决方案2】:

double 值在转换为 String 时永远不会是 integer。它将始终包含decimals

如果你想在控制台打印一个双精度为23,你可以将它转换为Int

System.out.println((int) yourDouble);

【讨论】:

    【解决方案3】:

    当你说double,如果你的号码是23,它会显示23.0,因为它是double

    如果您的意思是打印带有 2 位数字的 int 值,则可以使用 System.out.printf("%.2d", number);

    这次我的系统上没有任何 Java 编译器用于测试,但我认为这是真的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多