为什么1除以1.1不起作用,即使我在我的代码中使用BigDecimal?

时间:2013-12-03 12:44:59

标签: android bigdecimal divide

我正在尝试使用4种基本操作来计算器。我开始使用双打来从edittext获取参数,但我发现了problem with decimal values。为了避免这种情况,我使用了BigDecimal,但现在应用程序在某些特定数字处失败,如1 /(1.1)。我注意到只有除法功能正在破坏应用程序,添加,子和乘法工作正常。我真的很感激这方面的一些帮助。这是代码的一部分:

 div.setOnClickListener( 
        new View.OnClickListener(){

                @Override
            public void onClick(View v){


                    if(! num1 .getEditableText().toString().matches("") && !num2 .getEditableText().toString().matches(""))
                    {String valor1 =num1.getText().toString();
                    String valor2 =num2.getText().toString();
                    BigDecimal a = new BigDecimal(valor1);
                    BigDecimal b = new BigDecimal(valor2);
                    BigDecimal result = a.divide(b);

                    Toast.makeText(MainActivity.this,"="+result, Toast.LENGTH_LONG).show();
                    }                                                                           }


            });

3 个答案:

答案 0 :(得分:1)

它在ArithmeticException上崩溃,因为结果是一个带有无限小数的数字。

来自http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html

“在除法的情况下,精确的商可以有一个无限长的十进制扩展;例如,1除以3.如果商具有非终止的十进制扩展并且指定了操作以返回精确结果,则为ArithmeticException抛出。否则,返回除法的确切结果,就像其他操作“

一样

答案 1 :(得分:1)

如果商具有非终止十进制扩展并且指定了操作以返回精确结果,则抛出ArithmeticException。否则,将返回除法的确切结果,与其他操作一样。

使用那样的除法

a.divide(b, 2, RoundingMode.HALF_UP)
where 2 is precision and RoundingMode.HALF_UP is rounding mode

源:https://stackoverflow.com/a/4591216/1589566

答案 2 :(得分:0)

在您所在的国家/地区可能是','而不是'。'

String valor1 = num1.getText().toString().replace('.', ',');

试试这个并告诉我们它是否有效!