首页 > 解决方案 > Android Studio - DecimalFormat (java.text) - 无法正常工作

问题描述

所以,我有以下代码在 Android Studio 4.0.1 中制作一个简单的温度应用转换器:

bt_converter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    double tempC = Double.parseDouble(et_tempC.getText().toString());

    DecimalFormat arredondar = new DecimalFormat("#.##");
    double tempF = Double.parseDouble(arredondar.format(tempC * 1.8 + 32));

    tv_tempF.setText(String.valueOf(tempF));
}

问题是,当我运行应用程序时,由于以下语句而崩溃: DecimalFormat arredondar = new DecimalFormat("#.##"); 同样的: DecimalFormat arredondar = new DecimalFormat("0.00");

事实上,每一个以“0”开头并涉及点“”的模式都会崩溃。

我试图将其切换为: DecimalFormat arredondar = new DecimalFormat("#,##");

它确实有效,但没有按预期显示两位小数,而且无论tempC我输入什么值,输出始终是某个数字点 zero (xx.0)

例如:因为tempC = 10.11111111 它显示tempF = 50.0 什么时候应该给我50.1950.2代替。

我重新安装了应用程序并清理了项目,甚至更改了我的 Windows 10 区域设置(关于十进制符号),但它仍然保持不变。

但是,如果您需要更多详细信息,请告诉我。

标签: javaandroid

解决方案


所以,我找到了一个解决方案,它按预期工作。我刚刚更改了最后三行代码:

DecimalFormat arredondar = new DecimalFormat("#.##");

double tempF = Double.parseDouble(arredondar.format(tempC * 1.8 + 32));
tv_tempF.setText(String.valueOf(tempF));

后:

DecimalFormat arredondar = new DecimalFormat("0.00");
double tempF = tempC * 1.8 + 32;

tv_tempF.setText(arredondar.format(tempF));

显然有一些错误/不兼容之王。但是,我意识到我正在使用前面代码中的第二行将 tempF 从 String 转换为 Double,然后使用第三行将其再次转换回 String。

所以我只是将 tempF 直接以字符串格式放在输出中,在没有转换的情况下计算它:

            double tempF = tempC * 1.8 + 32;

            tv_tempF.setText(arredondar.format(tempF));

而且我已经将模式从“#.##”更改为“0.00”,以确保我每次都能得到两位小数。


推荐阅读