【问题标题】:Getting wrong locale for portugal(Brazil)葡萄牙(巴西)的语言环境错误
【发布时间】:2018-05-23 06:27:02
【问题描述】:

我正在尝试获取葡萄牙(巴西)的系统区域设置,但它提供的小数点分隔符为 . 而不是 , 有人可以帮忙吗?我正在使用 Java 8。

下面是我正在使用的代码:

public static void main(String[] args) 
{
    final Locale locale = new Locale(System.getProperty("user.country.format"));

    final NumberFormat nf = NumberFormat.getNumberInstance(locale);

    DecimalFormatSymbols decSymbols = new DecimalFormatSymbols(locale);
    System.out.println("Decimal Symbol"+ decSymbols.getDecimalSeparator() + "");
}

将小数点分隔符设为. 而不是,

【问题讨论】:

  • 第一个问题:System.getProperty("user.country.format")的值是多少?
  • System.getProperty("user.country.format") 的值为 "br"
  • 为什么这个标签是bigdecimal

标签: java decimalformat


【解决方案1】:

我能够使用 pt 语言环境(葡萄牙)获得您预期的小数分隔符 ,

final Locale locale = new Locale("pt");
final NumberFormat nf = NumberFormat.getNumberInstance(locale);
DecimalFormatSymbols decSymbols = new DecimalFormatSymbols(locale);
System.out.println("Decimal Symbol"+ decSymbols.getDecimalSeparator() + "");

我没有看到从对DateFormat.getAvailableLocales() 的调用中返回的任何br 语言环境,因此要么它根本不存在(至少在我的JRE 中),要么它使用小数点作为小数点分隔符。请注意,我认为您应该使用 pt_BR 语言环境,但前提是您的 JRE 支持它。如果没有,那么您的代码可能只会使用默认语言环境。

【讨论】:

  • 对于“pt”,我们得到了正确的十进制分隔符,即“,”我们从对 DateFormat.getAvailableLocales() 的调用中得到了“pt_br”,所以“pt_br”或“br”都是正在返回“。”作为十进制分隔符而不是返回','作为十进制分隔符,而在系统设置中,我们将十进制分隔符作为','
  • @ashishsharma 在我看来你不像巴西人。您确定巴西的习惯实际上是使用逗号作为小数分隔符吗?
  • 是的,我确定是因为我遇到了用户报告相同的问题
  • 根据维基百科,巴西和南美洲其他地区(AFAICT 除外)使用逗号作为小数分隔符。
  • @RudyVelthuis 也许 OP 的 JRE 不支持 pt_BR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
相关资源
最近更新 更多