【问题标题】:Java issue converting String to doubleJava问题将String转换为double
【发布时间】:2015-06-15 09:40:34
【问题描述】:

我正在尝试将字符串转换为双精度。

源字符串的格式是“88.6”,我期望的双精度应该是“88.60”。

我尝试使用 Double.parseDouble、Double 构造函数、Double.valueOf、DecimalFormat 和 NumberFormat 硬编码 Locale.US 或 Locale.ENGLISH 进行转换,但我仍然得到“88,600000”。

我应该如何转换它?

谢谢

DecimalFormat df = new DecimalFormat("#.##", new DecimalFormatSymbols(Locale.US));
try {
    dValue = df.parse(szValue).doubleValue();
} catch(ParseException e) {
    e.printStackTrace();
}

【问题讨论】:

  • 你问的是格式吗? 88.6、88.60 和 88.600000 在数学上是相同的。
  • 您期望在 88.6、88.60 和 88.600000 之间有哪些不同的 double 位模式? (提示:它们都是相同的值。double 不“知道”尾随无关紧要的零……如果您关心这一点,您可能想要使用 BigDecimal。)
  • 我也试过 BigDecimal,没办法.. 我需要“88.60”而不是“88,60”
  • 我怀疑这是输出而不是转换的问题。你能展示你的印刷线吗?
  • 这个值是查询MySQL的参数 String query = String.format(Query.brands, id, dBasePot); Query.brands 包含 %f 以格式化双 dBasePot

标签: java double


【解决方案1】:

虽然我认为没有必要保留尾随零,但我认为这就是您所要求的:

    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setDecimalSeparator('.');
    java.text.DecimalFormat df = new java.text.DecimalFormat();  
    df.setDecimalFormatSymbols(dfs);
    df.applyPattern( "###0.00" );
    String s = "9.90" ;
    System.out.println("non formated d=" + Double.valueOf(s) + " formated d=" +df.format(Double.valueOf(s)));   

尾随零仅在打印时可见,因此您只需格式化数字

【讨论】:

  • 似乎如果我使用带有 %f 的格式字符串,它使用逗号作为小数分隔符,而连接字符串则使用点
  • 您可以设置小数分隔符,即时编辑代码,只需将其设置为逗号或点或任何你喜欢的东西
  • 您的代码现在可以按预期打印,但是一旦我在带有 String.format("string contains %f", value) 的格式字符串中使用它,它仍然使用逗号作为小数分隔符
  • 这很可能是因为您的默认区域设置正在将其更改回来,并且 string.format 使用您拥有的区域设置,而不管您对字符串/数字进行了任何更改。这就是为什么我制作了一个格式化程序来打印数字。我的默认语言环境是西班牙语,它也用逗号打印数字,但如果你把它改成英文,它会用点打印它们。这就是pastebin.com/pd1VzQ2G
  • 感谢您的解释。所以所有问题都与区域设置有关。无论如何,感谢您的帮助
猜你喜欢
  • 2022-01-10
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2014-09-23
相关资源
最近更新 更多