DecimalFormat 为负双精度输入返回“?”而不是“-”

Posted

技术标签:

【中文标题】DecimalFormat 为负双精度输入返回“?”而不是“-”【英文标题】:DecimalFormat returns " ? " instead of " - " for negative Double input 【发布时间】:2019-09-18 21:12:22 【问题描述】:

DecimalFormat 返回 ? 符号代替 - 符号,当赋予它的值为负时。

我正在使用带有 SCRIPT 包和 JDK12.0.2 的 ATOM。

我可以用几乎任何其他符号替换“-”符号,并且 DecimalFormat 将给出正确的输出。这就是让我对这个问题感到困惑的原因。我试图调查语言环境问题,但未能解决问题。

double nTest = -20.20;
System.out.println("simtest " + nTest + "C");

private static DecimalFormat desFor = new DecimalFormat("#0.0;-#0.0");
System.out.println("simtest " + desFor.format(-20.20) + "C");
System.out.println("simtest " + desFor.format(21.45) + "C");

private static DecimalFormat desForAny = new DecimalFormat("#0.0;*#0.0");
System.out.println("simtest " + desForAny.format(-20.20) + "C");

结果

simtest -20.2C

simtest ?20,2C  <=== expected  -20,2C

simtest 21,4C

simtest *20,2C

【问题讨论】:

这可能是您终端中的编码问题吗?那绝对是-,而不是一些unicode符号? 【参考方案1】:

尝试设置java.util.Locale

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.ENGLISH);
DecimalFormat desFor = new DecimalFormat("#0.0;-#0.0", symbols);

【讨论】:

谢谢,这成功了。我最初遇到了符号错误的问题。我对编程很陌生,但我设法弄清楚我可能需要导入 DFsymbols 函数。我设法从 oracle 文档中找到了答案,这很不言自明。

以上是关于DecimalFormat 为负双精度输入返回“?”而不是“-”的主要内容,如果未能解决你的问题,请参考以下文章

将负双精度转换为无符号整数的行为是不是在 C 标准中定义? ARM 与 x86 上的不同行为

Java - Decimal Format.parse 返回具有指定小数位数的双精度值

Java DecimalFormat 在格式化双精度时失去精度

返回没有尾随零的双精度类型

我想在使用 DecimalFormat 时保留尾随零

Java中小数精度问题