如何指定GWT的NumberFormat使用的千位和小数分隔符

use*_*354 7 gwt number-formatting

在GWT的NumberFormat类(http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/i18n/client/NumberFormat.html)的文档中,我读到:

"用于无穷大,数字,千位分隔符,小数分隔符等的前缀,后缀和各种符号可以设置为任意值,并且在格式化期间它们将正确显示.但是,必须注意符号和字符串执行不冲突,或解析将是不可靠的.例如,小数分隔符和千位分隔符应该是不同的字符,否则解析是不可能的."

我的问题是,我如何确保"." 用作千位分隔符和","作为小数分隔符独立于用户的语言环境设置?在当我使用模式"###,###,###.######"我想GWT的双重价值1234567.89格式化换句话说始终为"1.234.567,89"无论什么用户的语言环境是.

Jos*_*ust 4

解决这个问题需要一些工作。从NumberFormatter 的文档源代码来看,似乎只能使用 Locales 来设置这些值。他们确实说您可以设置组分隔符,但没有这样的例子对我有用。虽然您可能认为在底层执行此操作的 Java 方法会起作用,因为 GWT 模拟 DecimalFormatDecimalFormalSymbols,但它们并不正式支持它们。也许他们将来会。此外,他们在LocaleInfo 类中说您可以修改区域设置,我发现没有这样的方法允许这样做。

所以,这里是Hack 的方法

    NumberFormat.getFormat("#,##0.0#").format(2342442.23d).replace(",", "@");
Run Code Online (Sandbox Code Playgroud)

正确的方法,但尚未支持 GWT

使用十进制格式化程序:

    // formatter
    DecimalFormat format= new DecimalFormat();
    // custom symbol
    DecimalFormatSymbols customSymbols=new DecimalFormatSymbols();
    customSymbols.setGroupingSeparator('@');
    format.setDecimalFormatSymbols(customSymbols);
    // test
    String formattedString = format.format(2342442.23d);
Run Code Online (Sandbox Code Playgroud)

输出:

2@342@442.23