BigDecimal舍入不舍入

时间:2013-07-25 18:32:50

标签: java android bigdecimal

我对Android编程非常陌生,所以任何帮助都会非常感激。我已经浏览了这些页面并且似乎找不到合适的答案。如果这是一个类似的问题我老实说道歉。 我的问题是,当我使用AIDE编译器在我的Android设备上编写代码时,下面的示例将进行舍入

pitch_round.setScale(2,BigDecimal.ROUND_UP); 

工作正常,我能够通过使用pitch_round.ToString()将圆形bigdecimal输出到TextView,当我在Eclipse中使用类似的代码时,编译时没有错误但是textview的输出似乎不是圆的根本没有错,现在似乎有更多的十进制字符。

下面是一段无效的代码片段。有什么我不在这里做的吗?所有的falues都是漂浮物 这与设备上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());

2 个答案:

答案 0 :(得分:4)

更改所有内容

pitch_round.setScale(2,BigDecimal.ROUND_UP); 

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

BigDecimal是不可变的,调用此方法会导致原始对象被修改

答案 1 :(得分:1)

setScale返回一个你要丢弃的新BigDecimal。尝试

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

来自setScale API doc:

  

请注意,由于BigDecimal对象是不可变的,因此调用此方法   不要导致原始对象被修改,与之相反   通常使用名为setX mutate field X的方法。相反,   setScale返回具有适当比例的对象;返回的对象   可能会或可能不会重新分配。