使用double在十进制后仅显示两位数的热门

时间:2015-04-14 20:40:14

标签: java android double

我用:

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;
    }
});

4 个答案:

答案 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);