BigDecimal округление не округляется

Я очень новичок в программировании для Android, поэтому любая помощь будет очень признательна. Я просмотрел страницы и, похоже, не нашел правильного ответа. Если это аналогичный вопрос, я искренне извиняюсь. Моя проблема в том, что когда я написал код на своем устройстве Android с компилятором AIDE, округление примера ниже

pitch_round.setScale(2,BigDecimal.ROUND_UP); 

работал нормально, и я смог вывести округленный bigdecimal в TextView с помощью pitch_round.ToString() , когда я использовал аналогичный код в Eclipse, при компиляции не было ошибки, но вывод в textview, похоже, вообще не округлялся, если я не ошибаюсь, теперь десятичных знаков стало больше.

Ниже приведен фрагмент кода, который не работает. Я что-то здесь не так делаю? Все значения являются числами с плавающей запятой. Это идентично коду, который использовался в AIDE на устройстве. Спасибо заранее.

        pitch = mOrientation[1]*57.2957795f;
        roll= mOrientation[2]*57.2957795f;
        yaw= mOrientation[0]*57.2957795f;
            // change to bigdecimal object
           BigDecimal pitch_round = new BigDecimal(pitch-zero_pitch);
           BigDecimal roll_round = new BigDecimal(roll-zero_roll);
           BigDecimal yaw_round = new BigDecimal(yaw-zero_yaw); 


           pitch_round.setScale(2,BigDecimal.ROUND_UP);
           roll_round.setScale(2,BigDecimal.ROUND_UP);
           yaw_round.setScale(2,BigDecimal.ROUND_UP);


           Log.i(SENSOR_SERVICE, pitch_round.toString());
            t_pitch.setTextColor(Color.CYAN);
        t_roll.setTextColor(Color.CYAN);
        t_yaw.setTextColor(Color.CYAN);
        // log some output to test code

        //Log.i(SENSOR_SERVICE, "Send Results"+ pitch); 

        t_pitch.setText(pitch_round.toString());
        t_roll.setText(roll_round.toString());
        t_yaw.setText(yaw_round.toString());

person user2619932    schedule 25.07.2013    source источник


Ответы (2)


Изменить все как

pitch_round.setScale(2,BigDecimal.ROUND_UP); 

to

pitch_round = pitch_round.setScale(2,BigDecimal.ROUND_UP);

BigDecimal неизменяем, вызовы этого метода не приводят к изменению исходного объекта

person jmj    schedule 25.07.2013

setScale возвращает новый BigDecimal, который вы отбрасываете. Пытаться

pitch_round = pitch_round.setScale(2,BigDecimal.ROUND_UP);

Из документа setScale API:

Обратите внимание, что, поскольку объекты BigDecimal являются неизменяемыми, вызовы этого метода не приводят к изменению исходного объекта, в отличие от обычного соглашения о том, что методы с именем setX изменяют поле X. Вместо этого setScale возвращает объект с правильным масштабом; возвращаемый объект может быть или не быть заново выделенным.

person ajb    schedule 25.07.2013