我有一个打印计算货币值的应用程序,我希望以默认货币格式显示该值。
例如在欧洲你会写:
1.000,95€
在美国,我想你会写
1,000.95 $
在其他货币中,小数部分显示的值或多或少,在美国则为2,但在日本则为0.
如何为所有现有货币获得尽可能准确的格式?
答案 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)
它具有多种功能,旨在使解析和解析成为可能 在任何语言环境中格式化数字,包括支持西方语言,阿拉伯语, 或印度数字。它还支持不同的数字, 包括整数(“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)