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 返回具有指定小数位数的双精度值