如何将双精度数更改为字符串

Posted

技术标签:

【中文标题】如何将双精度数更改为字符串【英文标题】:How to change a double to a string 【发布时间】:2020-04-12 14:10:13 【问题描述】:

我有一个应用程序,它在 EditText 中显示一个字符串,这个字符串是用户在两个不同的 EditTexts 中键入的另外两个 double 操作的结果。 问题是我希望操作的结果显示在第三个 EditText 中,但它必须是一个字符串。因此我通过 toString 方法更改结果。

问题从这里开始,我希望作为字符串的双精度只有一位小数。为此,我使用了 DecimalFormat 并创建了 df 格式“#.#”。然后我将最后一个 EditText 中显示的文本更改为只有一位小数的新双变量(显然将其更改为字符串)。

DecimalFormat df = new DecimalFormat("#.#");
double BMI_trimmed = Double.parseDouble(df.format(BMI));

final EditText BMIResult = (EditText)findViewById(R.id.BMIResult);
BMIResult.setText(Double.toString(BMI_trimmed));

这里我把 myButtonListenerMethod 的所有代码留给你:

public void myButtonListenerMethod()
    button = (Button)findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            final EditText heighText = (EditText)findViewById(R.id.heightInput);
            String heighStr = heighText.getText().toString();
            double height = Double.parseDouble(heighStr);

            final EditText weighText = (EditText)findViewById(R.id.weightInput);
            String weighStr = weighText.getText().toString();
            double weight = Double.parseDouble(weighStr);

            double BMI = (weight)/(height*height);

            DecimalFormat df = new DecimalFormat("#.#");
            double BMI_trimmed = Double.parseDouble(df.format(BMI));

            final EditText BMIResult = (EditText)findViewById(R.id.BMIResult);
            BMIResult.setText(Double.toString(BMI_trimmed));
        
    );

这个应用程序在 AVD 上完美运行,我已经运行了三个。但是当我在真实设备上运行它并单击启动 myButtonListenerMethod 的按钮时,它突然停止工作并关闭。终端给出以下错误信息:

E/androidRuntime: FATAL EXCEPTION: main
    Process: com.example.bmicalculator, PID: 19058
    java.lang.NumberFormatException: For input string: "24,2"
        at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)

如果有人知道问题出在哪里,请告诉我,我会试试。老实说,我不明白为什么它在 AVD 中运行,但在真实设备中却不能正常运行。有什么想法吗?

【问题讨论】:

嗯,根据设备的区域设置,输入“24,2”可能不是有效数字。您能帮我们验证一下语言环境吗? 某些语言环境使用逗号作为小数分隔符,您的设备可能正在使用这样一种语言环境。请检查此 SO question. 【参考方案1】:

您已经根据需要将值四舍五入,并作为格式化程序的字符串。不要试图解析它,只是显示它。

BMIResult.setText(df.format(BMI));

【讨论】:

【参考方案2】:

问题可能是您的手机语言环境。有些手机使用 .作为分隔符,有些使用 , 作为分隔符。尝试将所有“,”替换为“。”在从 String 解析为 Double 之前。

也尝试使用这个答案: https://***.com/a/7559011/2249224

【讨论】:

【参考方案3】:
double BMI_trimmed = Double.parseDouble(df.format(BMI));
String yourResult = String.valueOf(BMI_trimmed);  

愉快的编码

【讨论】:

以上是关于如何将双精度数更改为字符串的主要内容,如果未能解决你的问题,请参考以下文章

可可 - 将双精度转换为字符串

Java:将双精度数转换为字符串

如何将双精度值格式化为点后两位小数且分隔符为千位的字符串?

SQL Server CE 转换/将双精度转换为字符串

如何将双精度格式设置为四舍五入到最接近的美元的货币?

在 C++ 中使用 boost::lexical_cast 将双精度转换为字符串?