目前我在显示格式化小数时遇到问题。在我的本地计算机中,我有一个十进制值:0.002100000000 存储在数据库中。
<h:outputText value="0.002100000000" converter="#{bigDecimal4DigitsConverter}" />
@FacesConverter("bigDecimal4DigitsConverter")
public class BigDecimal4DigitsConverter extends BigDecimalConverter {
private DecimalFormat format = new DecimalFormat("#,##0.0000");
@Override
protected DecimalFormat getDecimalFormat() {
return format;
}
}
我的问题出在我的本地计算机上,它显示:
0.0021 - 美国设置
但在另一台服务器上
0,0021 - 法语设置
这是为什么?我认为 DecimalFormat 会格式化十进制值,而不管区域设置如何?
The DecimalFormat pattern http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html正如其名称(和 javadoc)所示,它是一种纯粹的模式。在这种模式下,,
代表分组分隔符和.
代表小数点分隔符。就是这样MMM
代表月份的缩写SimpleDateFormat http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html(请注意,它不会返回MMM
作为格式化期间的月份,但就像May
或例如Mei
取决于区域设置)。
The actual用作分组分隔符和小数点分隔符的字符(以及actual格式化期间用作缩写月份的文本取决于区域设置,正如您所观察到的那样。这是正确的行为。当您在创建过程中没有明确指定区域设置时DecimalFormat
(or SimpleDateFormat
),然后可用的默认区域设置Locale#getDefault() http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#getDefault%28%29将被假设。您实际上应该指定UIViewRoot#getLocale()
或者也许是一个固定的区域设置,例如Locale.ENGLISH
如果您的 JSF Web 应用程序由于某种不明原因未本地化。
另请注意DecimalFormat
就好像SimpleDateFormat
)不是线程安全的(检查javadoc中的“同步”部分)。您不应该在类/实例范围内创建它,而应该在线程本地范围内创建它(即在与您需要它的位置完全相同的方法块中)。
我只是不知道哪个BigDecimalConverter
你正在使用,标准 JSF 之一 http://docs.oracle.com/javaee/6/api/javax/faces/convert/BigDecimalConverter.html没有getDecimalFormat()
方法,所以我无法给出正确方法的更具体示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)