2015-12-11 3 views
1
public void onButtonClick(View v) { 
    int n1, n2, n3; 
    double calc; 

    EditText e1 = (EditText)findViewById(R.id.first_grade); 
    EditText e2 = (EditText)findViewById(R.id.second_grade); 
    EditText e3 = (EditText)findViewById(R.id.third_grade); 
    TextView t1 = (TextView)findViewById(R.id.calculate); 

    n1 = Integer.parseInt(e1.getText().toString()); 
    n2 = Integer.parseInt(e2.getText().toString()); 
    n3 = Integer.parseInt(e3.getText().toString()); 
    calc = (n1 + n2 + n3)/3; 

    t1.setText(String.format("%.2f", calc)); 
} 

Это мой код, и я также попытался использовать DecimalFormat, но ни одно из решений от stackoverflow не работает для меня.округления до 2 знаков после запятой в Android

Если я положил 11, 22, 10 соответственно в качестве ввода, я должен получить результат 14.333333, но я получаю 14.00 за результат.

Кто-нибудь знает, как исправить эту ошибку? Или есть решение?

ответ

2

Поскольку переменные n1, n2 и n3 являются ints, их сумма и последующее разделение являются целыми числами, а также. Таким образом, результат усекается до целого.

Чтобы получить точный результат, вы должны заставить деление быть плавающей точкой. Для этого один из операндов должен быть двойным. Вы можете заставить это, заменив 3 с 3.0

(n1 + n2 + n3)/3.0 

Далее, как мы можем округлить результат до двух знаков после запятой. Мы можем умножить результат на 100, выполнить целочисленное деление и только затем разделить на 100 и преобразовать в double.

((n1 + n2 + n3) * 100/3)/100.0 

Вы можете увидеть дополнительные пути к раунду в this question.

+0

спасибо. Теперь я понимаю, что пошло не так, и исправил это! – stickoverflow

1

Вопрос заключается в следующей строке кода

calc = (n1 + n2 + n3)/3; 

Все значениями являются целыми числами, так что вычисления (11 + 22 + 10)/3 как целого значения 14 с помощью целочисленного деления.

Если вы измените делитель на двойной, результат будет арифметикой с плавающей запятой.

calc = (n1 + n2 + n3)/3.0; 
0

попытка бросить целочисленный результат удвоить

calc =(double) (n1 + n2 + n3)/3; 
Смежные вопросы