如何使用设备货币格式格式化浮点值?

问题描述:

我有一个打印计算货币值的应用程序,我想用默认货币格式显示该值。如何使用设备货币格式格式化浮点值?

例如,在欧洲你可以这样写:

1.000,95€

在美国,我想你会写

1,000.95 $

其他货币也有或多或少的值显示为小数部分,在美国它将是2但在日本它将是0.

如何获得尽可能准确的fo所有现有货币的rmat?

我找到了解决方案。 NumberFormat类有许多预定义的格式化程序。还有一个用于格式化货币值。

如果使用静态方法getCurrencyInstance,该类将返回设备默认货币的格式化程序。我用下面的代码来设置我的结果:

NumberFormat format = NumberFormat.getCurrencyInstance(); 
((TextView) findViewById(R.id.text_result)).setText(format.format(result)); 
+1

结果变量是哪种格式? –

+1

结果= 1000时会发生什么情况,您的手机区域设置是FR,但是您在美国?它会写1000欧元而不是1000美元?货币格式不会考虑转换或结果正确吗? –

结帐DecimalFormat

它有各种各样的设计,使其能够解析和在任何区域 格式的数字,其中包括西,阿拉伯语, 或印度语数字的支持功能。它还支持包括整数(“123”),定点数(123.4),科学 表示法(“1.23E4”),百分比(“12%”),和货币金额 的不同风格的数字 ( “$ 123”)。所有这些口味都可以轻松本地化。

为了完整起见假设你想显示手机当前的区域设置(十进制正确标记和千个分隔符)的代价,但与您所选择的货币。

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.getDefault()); 
format.setCurrency(Currency.getInstance("CZK")); 
String result = format.format(1234567.89); 

result然后将持有这些值:

  • CZK1,234,567.89与美国地区
  • 1 234 567,89 Kč与捷克的语言环境

如果您想省略对价格的小数部分(显示$199而不是$199.00)在使用格式化程序之前调用它:

format.setMinimumFractionDigits(0); 

所有选项都列在NumberFormat docs中。

+0

此链接对语言环境很有帮助http://*.com/questions/4212320/get-the-current-language-in-device?rq=1 –

+0

如果有人在获取正确的货币符号时遇到问题,这里有一个替代的https: //*.com/questions/9777689/how-to-get-numberformat-instance-from-currency-code –

获得设备的语言环境,你可以这样做:

@TargetApi(Build.VERSION_CODES.N) 
    public static Locale getCurrentLocale(Context c) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      return c.getResources().getConfiguration().getLocales().get(0); 
     } else { 
      //noinspection deprecation 
      return c.getResources().getConfiguration().locale; 
     } 

,然后做格式:

 double num = 1323.526; 

     NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(getCurrentLocale(getContext())); 
     defaultFormat.format(num)