使用 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);