繁体   English   中英

Android Studio - DecimalFormat (java.text) - 工作不正常

[英]Android Studio - DecimalFormat (java.text) - Not working properly

所以,我有以下代码在 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值,output 始终是某个数字点零(xx.0)

例如:对于tempC = 10.11111111 ,它显示tempF = 50.0当它应该给我50.1950.2时。

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

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

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

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 直接放在 output 中,使用 String 格式,在不进行转换的情况下进行计算:

            double tempF = tempC * 1.8 + 32;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM