Java GWT-在默认区域设置中格式化数字,而不考虑所选区域设置
我正在尝试使用GWT的NumberFormat格式化和解析数字,但我希望使用默认格式(例如EN语言环境),而不管用户选择的语言环境如何,因此用户可以选择任何语言,但我希望使用默认格式(例如1234.89)显示和解析数字 有办法做到这一点吗 编辑: 例如,此代码仅在EN语言环境下有效,在RU中我获得NumberFormatExceptionJava GWT-在默认区域设置中格式化数字,而不考虑所选区域设置,java,gwt,internationalization,Java,Gwt,Internationalization,我正在尝试使用GWT的NumberFormat格式化和解析数字,但我希望使用默认格式(例如EN语言环境),而不管用户选择的语言环境如何,因此用户可以选择任何语言,但我希望使用默认格式(例如1234.89)显示和解析数字 有办法做到这一点吗 编辑: 例如,此代码仅在EN语言环境下有效,在RU中我获得NumberFormatException NumberFormat format = NumberFormat.getFormat("#,##0.00"); String n = "1,234.89"
NumberFormat format = NumberFormat.getFormat("#,##0.00");
String n = "1,234.89";
double value = format.parse(n);
//do something with value...
我需要获取locale EN的NumberFormat实例,但我在javadocs中找不到任何可以这样做的方法/构造函数。我知道您应该使用的编号是
NumberFormat.format
,而不是NumberFormat.parse
:
NumberFormat format = NumberFormat.getFormat("#,##0.00");
Double n = 1234.89;
RootPanel.get().add(new HTML("Number: " + format.format(n)));
如果您已经有了数字的格式化字符串表示形式,则不需要NumberFormat
:
String n = "1,234.89";
RootPanel.get().add(new HTML("Number: " + n));
NumberFormat
始终解析本地化文本。它使用的NumberConstants
是根据当前语言环境通过延迟绑定实例化的。不幸的是,您不能强制使用其他NumberConstants
但是您知道默认的分组分隔符(,
)和十进制分隔符(
)。还可以获取当前区域设置的分组和小数分隔符。因此,您只需要在解析之前替换它们
String n = "1,234.89";
n = n.replace(",", LocaleInfo.getCurrentLocale().getNumberConstants().groupingSeparator());
n = n.replace(".", LocaleInfo.getCurrentLocale().getNumberConstants().decimalSeparator());
double value = format.parse(n);
这应该适用于任何语言环境
要使用默认语言环境格式化数字,只需在当前语言环境中格式化后进行相反的替换。请说明您现在是如何进行格式化的,以及您已经尝试过的内容。这只是一个示例,我需要数字的双值来操作它。我已经编辑了我的帖子。我刚刚深入研究了
NumberFormat
代码,它告诉我们,通过在NumberFormat
结构中设置NumberConstants
可以实现您想要的。但这是不可能的NumberFormat
构造函数受保护,在创建后无法指定固定的NumberConstants
(除了对您不有用的setForcedLatinDigits
)。因此,除非你想进行大规模的黑客攻击,否则我认为不可能使用NumberFormat
来做你想做的事情。也许我错了,也许其他人看到了。。。