我有一个Android应用程序,可以完成一些基础数学。
实施例
try {
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat) nf;
a = Float.parseFloat(vw3.getText().toString());
f = Float.parseFloat(vw5.getText().toString());
c = a / 100;
d = c * 1.036f;
e = f / 100;
g = e * 1.24f;
h = d + g;
String str1 = String.valueOf(df.format(h));
vw7.setText(str1);
} catch (NumberFormatException f) {
a = (0);
}
}
当用户在美国时,计算工作正常并且格式正常。正如你所料。分组为逗号和分隔符的1,000.00格式是小数点。当用户在法国时,分组不同,分隔符也不同。使用1,000.00示例,在法国,数字的格式将为1 000,00。空格是分组分隔符,逗号是小数分隔符。当您尝试运行计算时会出现问题,并且您将获得NumberFromatException(NFE)。我预计会出现一个非正常现象问题并抓住它并用正确的数字替换可能的原因。但是,用空格替换任何逗号,用逗号替换任何句号也会产生NFE。
实施例
try {
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat) nf;
a = Float.parseFloat(vw3.getText().toString().replace(",",""));
f = Float.parseFloat(vw5.getText().toString().replace(",",""));
c = a / 100;
d = c * 1.036f;
e = f / 100;
g = e * 1.24f;
h = d + g;
String str1 = String.valueOf(df.format(h));
vw7.setText(str1);
} catch (NumberFormatException f) {
a = (0);
}
}
编辑 - 正如Peter O所建议的那样。我尝试用区域设置感知方法解析数字。
实施例
NumberFormat.getNumberInstance().parse(string);
或者
NumberFormat df = NumberFormat.getNumberInstance();
String value = "10,40 €";
Number valueParsed = df.parse(value);
vw7.setText(valueParsed);
将产生一个" Bad Class" illegalargument。
我正在寻找一个解决方案,我可以在应用程序编程中以可接受的方式进行计算,无论区域设置如何,然后将结果格式化为区域设置。问题可能是,或者,您是否强制进行计算的区域设置,然后格式化区域设置的结果?
答案 0 :(得分:0)
如果这是您正在使用的代码,并且您的字符串将具有货币符号。在这种情况下€欧元符号。
您的例子:
Save
以便NumberFormat df = NumberFormat.getNumberInstance();
String value = "10,40 €";
Number valueParsed = df.parse(value);
vw7.setText(valueParsed);
始终具有您需要使用的货币符号
value
而不是NumberFormat df= NumberFormat.getCurrencyInstance();
。这适用于我的系统,当前设置为€符号是默认货币符号。您必须在具有$ currency符号的系统上尝试它,以便验证它是否在那里工作。