java - 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.19
或50.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 直接以字符串格式放在输出中,在没有转换的情况下计算它:
double tempF = tempC * 1.8 + 32;
tv_tempF.setText(arredondar.format(tempF));
而且我已经将模式从“#.##”更改为“0.00”,以确保我每次都能得到两位小数。
推荐阅读
- uwp - UWP ListView PointerEntered
- reactjs - 在浏览器中单击返回后反应无限滚动重置状态
- qt - QML 属性依赖是如何确定的?(以及如何操作它们)
- javascript - 我的应用程序将数据发布到 JSON 中,但它也会引发此错误“http://localhost:5000/write net::ERR_CONNECTION_RESET”
- mysql - 如何简化mysql中的多个UNION ALL?
- assembly - 为什么分配给寄存器不会导致其他所有问题?
- javascript - 如何在画布内明显居中 div?
- ios - 无法在 iOS 上获得正确的互联网连接状态
- python - 出现错误:- env: 'python3\r': No such file or directory 在 windows10 中使用 Docker 运行 pyspark 项目时
- python - 安装 ROS 时在 em 包中找不到 __main__ 模块