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

时间:2011-08-20 13:08:19

标签: android localization locale

我有一个打印计算货币值的应用程序,我希望以默认货币格式显示该值。

例如在欧洲你会写:

1.000,95€

在美国,我想你会写

1,000.95 $

在其他货币中,小数部分显示的值或多或少,在美国则为2,但在日本则为0.

如何为所有现有货币获得尽可能准确的格式?

4 个答案:

答案 0 :(得分:73)

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

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

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

答案 1 :(得分:68)

为了完整起见,假设您要在手机的当前区域设置中显示价格(正确的小数点和千位分隔符),但使用您选择的货币。

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

答案 2 :(得分:3)

查看DecimalFormat

  

它具有多种功能,旨在使解析和解析成为可能   在任何语言环境中格式化数字,包括支持西方语言,阿拉伯语,   或印度数字。它还支持不同的数字,   包括整数(“123”),定点数(“123.4”),科学   符号(“1.23E4”),百分比(“12%”),和货币金额   ( “$ 123”)。所有这些口味都可以很容易地进行本地化。

答案 3 :(得分:1)

获取设备区域设置,您可以使用它:

@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)