更改NumberConstants.decimalSeparator()值

时间:2009-06-01 13:16:12

标签: java gwt gxt

我正在使用NumberField和NumberFormat。 如何在不更改语言环境的情况下更改NumberConstants.decimalSeparator()值?例如,我想要“。”或“,”作为所有语言环境的小数分隔符。 是否可以创建自定义属性文件NumberConstants_bla.properties并强制gxt使用它而不是标准的NumberConstants_ru_RU.properties或NumberConstants_en_US.properties(取决于当前的语言环境)?我应该把这个文件放在哪里?

2 个答案:

答案 0 :(得分:1)

在Java中,您可以使用DecimalFormatSymbols设置小数点分隔符。

// default symbols for the locale
DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance();
// set your required separator
decimalFormatSymbols.setDecimalSeparator(',');
// create a decimal format and set your symbols
DecimalFormat format = new DecimalFormat();
format.setDecimalFormatSymbols(decimalFormatSymbols);

答案 1 :(得分:0)

您可以创建自己的NumberConstants(在其中放置所需的小数分隔符),然后使用它来创建自己的NumberFormat。

我自己的NumberConstants示例:

import com.google.gwt.i18n.client.constants.NumberConstants;

public class MyNumberConstants implements NumberConstants {
  @Override
  public String notANumber() {
    return "NaN";
  }

  @Override
  public String currencyPattern() {
    return "#,##0.00\\u00A0\\u00A4";
  }

  @Override
  public String decimalPattern() {
    return "#,##0.###";
  }

  @Override
  public String decimalSeparator() {
    return ".";
  }

  @Override
  public String defCurrencyCode() {
    return "EUR";
  }

  @Override
  public String exponentialSymbol() {
    return "e";
  }

  @Override
  public String globalCurrencyPattern() {
    return "#,##0.00\\u00A0\\u00A4";
  }

  @Override
  public String groupingSeparator() {
    return "\\u00A0";
  }

  @Override
  public String infinity() {
    return "\u221E";
  }

  @Override
  public String minusSign() {
    return "-";
  }

  @Override
  public String monetaryGroupingSeparator() {
    return ",";
  }

  @Override
  public String monetarySeparator() {
    return "\\u00A0";
  }

  @Override
  public String percent() {
    return "%";
  }

  @Override
  public String percentPattern() {
    return "#,##0\\u00A0%";
  }

  @Override
  public String perMill() {
    return "\\u2030";
  }

  @Override
  public String plusSign() {
    return "+";
  }

  @Override
  public String scientificPattern() {
    return "#E0";
  }

  @Override
  public String simpleCurrencyPattern() {
    return "#,##0.00\\u00A0\\u00A4";
  }

  @Override
  public String zeroDigit() {
    return "0";
  }
}

MyFormat示例:

public class MyFormat extends NumberFormat{

  public MyFormat(){
    super(new MyNumberConstants(),"0.0", CurrencyList.get().getDefault(),true);
  }
}

警告:这是一个丑陋的解决方法,可能会导致i18n出现问题。我只是用它来格式化一些我认为以相同的方式显示给每个人的维度。