Java 服务器设置正在覆盖DecimalFormat
目前我在显示格式化的小数时遇到问题。在我的本地机器中,我有一个十进制值:0.0021000000存储在数据库中Java 服务器设置正在覆盖DecimalFormat,java,jsf-2,converter,bigdecimal,Java,Jsf 2,Converter,Bigdecimal,目前我在显示格式化的小数时遇到问题。在我的本地机器中,我有一个十进制值:0.0021000000存储在数据库中 <h:outputText value="0.002100000000" converter="#{bigDecimal4DigitsConverter}" /> @FacesConverter("bigDecimal4DigitsConverter") public class BigDecimal4DigitsConverter extends BigDecimalC
<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;
}
}
@FacesConverter(“BigDecimal4数字转换器”)
公共类BigDecimal4数字转换器扩展BigDecimalConverter{
私有DecimalFormat=新的DecimalFormat(“0.0000”);
@凌驾
受保护的DecimalFormat getDecimalFormat(){
返回格式;
}
}
我的问题在本地计算机上,它显示:
0.0021-美国设置
但是在另一台服务器上
00021-法语设置
为什么呢?我认为DecimalFormat,不管语言环境如何格式化十进制值?正如它的名字(和javadoc)所说,它是一种纯模式。在此模式中,,
表示分组分隔符,
表示十进制分隔符。这与MMM
表示中的缩写月份完全相同(请注意,在格式化过程中,它不会将MMM
作为月份返回,而与May
或例如Mei
一样,具体取决于区域设置)
格式化期间用作分组分隔符和小数分隔符的实际字符(以及用作缩写月份的实际文本)取决于区域设置,正如您所观察到的那样。这是正确的行为。当您在创建DecimalFormat
(或SimpleDataFormat
)期间未明确指定区域设置时,将假定默认区域设置为可用。如果您的JSF web应用程序由于某些不清楚的原因没有本地化,您实际上应该指定UIViewRoot#getLocale()
,或者像locale.ENGLISH
这样的固定区域设置
还请注意,DecimalFormat
不是线程安全的(如SimpleDateFormat
)。您不应该在类/实例范围内创建它,而应该在线程本地范围内创建它(即,在您需要它的同一个方法块中)
我不知道您正在使用的BigDecimalConverter
没有getDecimalFormat()
方法,因此我无法给出更具体的正确方法示例。正如它的名字(和javadoc)所说,它是一个纯模式。在此模式中,,
表示分组分隔符,
表示十进制分隔符。这与MMM
表示中的缩写月份完全相同(请注意,在格式化过程中,它不会将MMM
作为月份返回,而与May
或例如Mei
一样,具体取决于区域设置)
格式化期间用作分组分隔符和小数分隔符的实际字符(以及用作缩写月份的实际文本)取决于区域设置,正如您所观察到的那样。这是正确的行为。当您在创建DecimalFormat
(或SimpleDataFormat
)期间未明确指定区域设置时,将假定默认区域设置为可用。如果您的JSF web应用程序由于某些不清楚的原因没有本地化,您实际上应该指定UIViewRoot#getLocale()
,或者像locale.ENGLISH
这样的固定区域设置
还请注意,DecimalFormat
不是线程安全的(如SimpleDateFormat
)。您不应该在类/实例范围内创建它,而应该在线程本地范围内创建它(即,在您需要它的同一个方法块中)
我不知道您使用的是哪个
BigDecimalConverter
,没有getDecimalFormat()
方法,因此我无法给出更具体的正确方法示例。你好,巴卢斯克,再次感谢您的回复。BigDecimalConverter只是我们实现的BigDecimalFaces转换器。不管怎样,我得到了你的回应,我完全误解了。我想我现在可以继续前进了。为什么这不能与来自世界各地的信息联系起来?我使用JSP页面和Struts,我刚刚在代码中发现了上千个地方我们做得不好,因为和标记通常没有考虑到这一点。嗨,BalusC,再次感谢您的回复。BigDecimalConverter只是我们实现的BigDecimalFaces转换器。不管怎样,我得到了你的回应,我完全误解了。我想我现在可以继续前进了。为什么这不能与来自世界各地的信息联系起来?我使用JSP页面和Struts,我刚刚发现代码中有上千个地方没有正确地执行此操作,因为和标记通常没有考虑到这一点。