我有一个打印计算货币值的应用程序,我想用默认货币格式显示该值。如何使用设备货币格式格式化浮点值?
例如,在欧洲你可以这样写:
1.000,95€
在美国,我想你会写
1,000.95 $
其他货币也有或多或少的值显示为小数部分,在美国它将是2但在日本它将是0.
如何获得尽可能准确的fo所有现有货币的rmat?
我有一个打印计算货币值的应用程序,我想用默认货币格式显示该值。如何使用设备货币格式格式化浮点值?
例如,在欧洲你可以这样写:
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));
它有各种各样的设计,使其能够解析和在任何区域 格式的数字,其中包括西,阿拉伯语, 或印度语数字的支持功能。它还支持包括整数(“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中。
此链接对语言环境很有帮助http://stackoverflow.com/questions/4212320/get-the-current-language-in-device?rq=1 –
如果有人在获取正确的货币符号时遇到问题,这里有一个替代的https: //stackoverflow.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)
结果变量是哪种格式? –
结果= 1000时会发生什么情况,您的手机区域设置是FR,但是您在美国?它会写1000欧元而不是1000美元?货币格式不会考虑转换或结果正确吗? –