我用:
priceTextView.setText(String.format("%.2f",price));
价格是双倍的。它工作,但当我必须从TextView检索值并将其转换为double时,我得到以下错误:
java.lang.NumberFormatException:无效的double:" 1,2"
还有另一种方法可以做同样的事情并避免错误吗?
以下是完整的代码:
Double prezzoDouble = Double.parseDouble(this.prezzo);
prezzoTextView.setText(String.format("%.2f", prezzoDouble));
quantitaSceltaEditText.addTextChangedListener(new TextWatcher() {
String prezzoUnitario=prezzo;
public void afterTextChanged(Editable s) {
int quantitaSceltaInt = Integer.parseInt(quantitaSceltaEditText.getText().toString());
if(quantitaSceltaInt>=1) {
String prezzoTotale = String.valueOf(String.format ("%.2f", (calcoloPrezzoTotale())));
prezzoTextView.setText(prezzoTotale);
}
else
{
prezzoTextView.setText(prezzoUnitario);
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
private double calcoloPrezzoTotale()
{
double prezzoNum=Double.parseDouble(prezzoTextView.getText().toString()); ///////////
double prezzoTotale=0;
int quantitaSceltaNum = Integer.parseInt(quantitaSceltaEditText.getText().toString());
prezzoTotale = prezzoNum * quantitaSceltaNum;
return prezzoTotale;
}
});
答案 0 :(得分:7)
它看起来像是在行
中分配的prezzoTotale = String.valueOf(String.format ("%.2f", (calcoloPrezzoTotale())));
由于语言环境设置,包含逗号(,
,即1,2
)。因此,请注意使用相同的语言环境进行解析。
班级NumberFormat
可以帮助你:
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();
查看您的代码也可以Locale.ITALY
;)检查完整的区域设置列表here。
p.s。 :String.format()
根据documentation使用Locale.getDefault();
。如果您不确定系统设置或使用允许您指定区域设置的替代方法public static String format(Locale l, String format, Object... args)
,请使用logcat检查其值。
答案 1 :(得分:0)
您应该尝试以下方法:
String.format("%.2f",price) //String.format("%2.f",price) is wrong
或
Double.parseDouble(this.prezzo);
可能是this.prezzo中的小数点分隔符,根据配置可以是点或逗号
答案 2 :(得分:0)
根据您居住的位置,您可以使用Locale.setDefault(Locale)方法更改看似问题的jvm默认值。它是setDefault(Locale aLocale)。这将设置系统范围的资源。根据Oracle文档。
答案 3 :(得分:0)
double dTotalPrice = 4.5;
String totalPrice = new DecimalFormat("##.##").format(dTotalPrice);