gpt4 book ai didi

java - DecimalFormat 被服务器设置覆盖

转载 作者:行者123 更新时间:2023-12-01 23:48:04 30 4
gpt4 key购买 nike

目前,我在显示格式化小数时遇到问题。在我的本地计算机中,我有一个十进制值: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 会格式化十进制值,而不管区域设置如何?

最佳答案

DecimalFormat pattern正如其名称(和 javadoc)所示,它是一种纯粹的模式。在此模式中,, 表示分组分隔符,. 表示小数点分隔符。就像 SimpleDateFormatMMM 代表月份的缩写一样。 (请注意,它在格式化期间不会返回 MMM 作为月份,而是像 May 或例如 Mei 一样,具体取决于区域设置)。

格式化期间用作分组分隔符和小数点分隔符的实际字符(以及用作缩写月份的实际文本)取决于区域设置,正如您所观察到的那样。这是正确的行为。如果您在创建 DecimalFormat(或 SimpleDateFormat)期间未显式指定区域设置,则 Locale#getDefault() 可用的默认区域设置将被假设。如果您的 JSF Web 应用程序由于某些不清楚的原因未本地化,您实际上应该指定 UIViewRoot#getLocale() 或固定的语言环境,例如 Locale.ENGLISH

另请注意,DecimalFormat(如SimpleDateFormat)不是线程安全的(请检查javadoc中的“同步”部分)。您不应该在类/实例范围内创建它,而应该在线程本地范围内创建它(即在与您需要它的位置完全相同的方法 block 中)。

我只是不知道您正在使用哪个BigDecimalConverterthe standard JSF one没有 getDecimalFormat() 方法,因此我无法给出正确方法的更具体示例。

关于java - DecimalFormat 被服务器设置覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16687407/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com