使用 double 仅显示小数点后两位数
Hot to show only two digits after decimal using double
我使用:
priceTextView.setText(String.format("%.2f",price));
价格翻倍。它有效,但是当我必须从 TextView 检索值并将其转换为 double 时,出现以下错误:
java.lang.NumberFormatException: Invalid 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;
}
});
看起来像行
中的双赋值
prezzoTotale = String.valueOf(String.format ("%.2f", (calcoloPrezzoTotale())));
由于区域设置,包含一个逗号(,
,即 1,2
)。因此,请注意在同一语言环境下进行解析。
Class 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();
.如果您不确定系统设置,请使用 logcat 检查其值,或者使用允许您指定区域设置的替代方法 public static String format(Locale l, String format, Object... args)
。
您应该尝试以下操作:
String.format("%.2f",price) //String.format("%2.f",price) is wrong
或
Double.parseDouble(this.prezzo);
可能是this.prezzo中的小数点分隔符有问题,根据配置可以是点或逗号
根据您居住的地方,您可以使用 Locale.setDefault(Locale) 方法来更改 jvm 默认值,这似乎是问题所在。它是 setDefault (Locale aLocale)。这设置了系统范围的资源。根据 Oracle 文档。
double dTotalPrice = 4.5;
String totalPrice = new DecimalFormat("##.##").format(dTotalPrice);
我使用:
priceTextView.setText(String.format("%.2f",price));
价格翻倍。它有效,但是当我必须从 TextView 检索值并将其转换为 double 时,出现以下错误:
java.lang.NumberFormatException: Invalid 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;
}
});
看起来像行
中的双赋值prezzoTotale = String.valueOf(String.format ("%.2f", (calcoloPrezzoTotale())));
由于区域设置,包含一个逗号(,
,即 1,2
)。因此,请注意在同一语言环境下进行解析。
Class 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();
.如果您不确定系统设置,请使用 logcat 检查其值,或者使用允许您指定区域设置的替代方法 public static String format(Locale l, String format, Object... args)
。
您应该尝试以下操作:
String.format("%.2f",price) //String.format("%2.f",price) is wrong
或
Double.parseDouble(this.prezzo);
可能是this.prezzo中的小数点分隔符有问题,根据配置可以是点或逗号
根据您居住的地方,您可以使用 Locale.setDefault(Locale) 方法来更改 jvm 默认值,这似乎是问题所在。它是 setDefault (Locale aLocale)。这设置了系统范围的资源。根据 Oracle 文档。
double dTotalPrice = 4.5;
String totalPrice = new DecimalFormat("##.##").format(dTotalPrice);