Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio-DecimalFormat(java.text)-工作不正常_Java_Android - Fatal编程技术网

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

Android Studio-DecimalFormat(java.text)-工作不正常,java,android,Java,Android,因此,我有以下代码在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

因此,我有以下代码在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=新的DecimalFormat(“#.##”); 同样适用于: DecimalFormat arredondar=新的DecimalFormat(“0.00”)

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

我尝试将其切换到: DecimalFormat arredondar=新的DecimalFormat(“#,##”)

它实际上是工作的,但它并没有按预期显示两位小数,而且无论我输入什么
tempC
值,输出总是一些数字点零
(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));
显然存在一些错误/不兼容。但是,我意识到我正在使用before代码中的第二行将tempF从String转换为Double,然后使用第三行将其再次转换回String

因此,在不进行任何转换的情况下计算tempF之后,我简单地将tempF以字符串格式直接放在输出中:

            double tempF = tempC * 1.8 + 32;

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

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

是否有帮助?请:无论何时发布问题,请始终复制/粘贴错误消息文本。建议:试试这种格式,把发生的事情发回来:
“#,#00.0#”
嗨,安·陈!我很感谢你的回答。不幸的是,它还没有工作,因为无论我为tempC输入了什么值,应用程序都会立即崩溃。可能代码中缺少了某些内容或出现了错误,因为它不接受DecimalFormat模式中的“0”或“.”。但我仍然愿意接受任何其他建议,我非常感谢你的帮助!