首页 文章

为什么1除以1.1在我的代码中使用BigDecimal?'t work, even when I' m?

提问于
浏览
0

我正在尝试用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 回答

  • 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

  • 1

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

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

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

  • 0

    在你的国家,它可能是','而不是' . '

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

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

相关问题