1

我对 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());
4

2 回答 2

4

改变一切喜欢

pitch_round.setScale(2,BigDecimal.ROUND_UP); 

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

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

于 2013-07-25T18:40:10.513 回答
1

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

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

从 setScale API 文档:

请注意,由于 BigDecimal 对象是不可变的,因此调用此方法不会导致修改原始对象,这与使用名为 setX 的方法更改字段 X 的通常约定相反。相反,setScale 返回具有适当比例的对象;返回的对象可能是新分配的,也可能不是新分配的。

于 2013-07-25T18:40:57.370 回答