我正在尝试使用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();
} }
});
答案 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
答案 2 :(得分:0)
在您所在的国家/地区可能是','而不是'。'
String valor1 = num1.getText().toString().replace('.', ',');
试试这个并告诉我们它是否有效!