我DecimalFormat
有时会返回一个“?” 尝试时format()
。是否有可以创建此场景的输入?
例如:
DecimalFormat df = new DecimalFormat("#.####");
df.format(X); // output : '?'
可能X
是什么?
我DecimalFormat
有时会返回一个“?” 尝试时format()
。是否有可以创建此场景的输入?
例如:
DecimalFormat df = new DecimalFormat("#.####");
df.format(X); // output : '?'
可能X
是什么?
不是问号,U+FFFD REPLACEMENT CHARACTER
是 ,显示为 ? 因为它不能映射到输出编码:
NaN 被格式化为字符串,通常只有一个字符 \uFFFD。此字符串由 DecimalFormatSymbols 对象确定。这是唯一不使用前缀和后缀的值。
相似地, ?在无穷大的表示中是一个U+221E INFINITY
字符(∞)。
Infinity 被格式化为一个字符串,它通常具有单个字符 \u221E,并应用了正数或负数前缀和后缀。无穷大字符串由 DecimalFormatSymbols 对象确定。
也可以看看:
它会返回“?” 如果X
是Float.NaN
或Float.POSITIVE_INFINITY
。似乎Float.NEGATIVE_INFINITY
返回“-?”。
我刚刚解决了非常相似的问题。就我而言,我试图将货币符号返回给 Spring 并将其显示在 Thymeleaf 模板中。
public String getAmountDue() {
DecimalFormat decimalFormat = new DecimalFormat("¤0.00");
decimalFormat.setCurrency(this.currency);
String result = decimalFormat.format(amountDue);
return result;
}
所以这实际上是返回格式正确的字符串,但在浏览器中,而不是,例如€99.99
我得到?99.99
- 所以不是货币符号,而是显示问号。
最后,这是我的 Spring 配置的问题,我通过添加characterEncoding
到我的配置中解决了这个问题:
<bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
...
<property name="characterEncoding" value="UTF-8" />
</bean>
你必须在这里定义本地实例..就像我得到 Locale.ENGLISH
双数=20.2563;
NumberFormat nf = NumberFormat.getNumberInstance(Locale.ENGLISH);
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern("##.00");
String output = df.format(no);