我正在尝试用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 回答
如果商具有非终止十进制扩展并且指定了操作以返回精确结果,则抛出ArithmeticException . 否则,返回除法的确切结果,与其他操作一样 .
使用这样的除法
来源:https://stackoverflow.com/a/4591216/1589566
它在ArithmeticException上崩溃,因为结果是一个带有无限小数的数字 .
从http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html
“在除法的情况下,精确商可以有一个无限长的十进制扩展;例如,1除以3.如果商具有非终止十进制扩展并且指定操作返回精确结果,则抛出ArithmeticException . 否则,返回除法的确切结果,就像其他操作一样“
在你的国家,它可能是','而不是' . '
试试这个并告诉我们它是否有效!