数字格式异常"无效的双重"

时间:2018-03-19 17:18:55

标签: android

我必须构建一个计算器并且我正在进行一些验证,代码有点长,所以我只会把它打破它。

这是一个进行乘法运算的验证,它在尝试乘以负数时会中断,其他每个操作都正确完成但是乘法:

else if(resulttxt.getText().toString().contains("*")){

                String resultarray=resulttxt.getText().toString();
                String[] split=resultarray.split("\\*");
                finalresult = Double.valueOf(split[0]) * Double.valueOf(split[1]);

                if (finalresult<0){
                    negative=true;
                }else{
                    negative=false;
                }
                resulttxt.setText(String.valueOf(finalresult));

结果文本是从TextView接收到的,它从数字或符号上获取它的数据,这些数字或符号也是TextViews(不是按钮,但是它们确实有点击监听器)当c = on时,操作完成登录。

如果我尝试做-6 * 45:

,则会抛出错误
java.lang.NumberFormatException: Invalid double: "6*45"

就像我所说的那样,所有事情都与加法,减法和除法有关,它只是间断的乘法。

3 个答案:

答案 0 :(得分:2)

我尝试在编译器中执行代码:

String resulttxt = "-6*45";
     boolean negative = false;
     if(resulttxt.contains("*")){

            String resultarray=resulttxt;
            String[] split=resultarray.split("\\*");
            double finalresult = Double.valueOf(split[0]) * Double.valueOf(split[1]);

            if (finalresult<0){
                negative=true;
            }else{
                negative=false;
            }
    System.out.println(finalresult);
     }

一切正常,请验证程序中使用的数据类型。

另外,乘法和除法工作正常。 “-6 + 45,-6 * 45和-6/45”(任何其他组合。我只是使用相同的)

但是对于减法,因为模式为“-6-45”,上述逻辑将失败并引发数字格式异常。这是因为如果你拆分“\ - ”,则“ - ”是字符串中的第一个字符,之前没有任何内容。

因此你的分裂会失败。因此,为了避免这种情况,您始终可以使用子字符串函数将最后一个字符索引分割。

答案 1 :(得分:1)

OMG伙计......这就是问题所在:

我在其他操作结束时进行了验证,因此,即使进入乘法部分,它也会进入&#34; - &#34;检查时验证

thank you page

因为它是一个负值,所以它确实有一个&#34; - &#34; ...所以它作为减法输入而不是因为这个... ...

要解决这个问题,我必须将减法验证放在所有这些的底部。

非常感谢那些建议我检查错误被抛出的行的人我不会知道logcat实际上告诉你错误是什么而且我很惊讶这是对我的减法验证是一个&#34; WTF&#34;那一刻,然后我意识到我刚才告诉你的事情。

答案 2 :(得分:0)

请改为尝试:

 String s1 = resultarray.substring(0,resultarray.indexOf("*"));
 String s2 = resultarray.substring(resultarray.indexOf("*")+1,resultarray.length());

 double d1= Double.valueOf(s1);
 double d2= Double.valueOf(s2);

希望这有帮助