2013-07-25 108 views
1

我对android编程非常陌生,所以任何帮助真的会受到赞赏。我浏览了页面,似乎没有找到正确的答案。如果这是一个类似的问题,我诚实地道歉。 我的问题是,当我与助手写我的Android设备上的代码编译如下BigDecimal舍入不舍入

pitch_round.setScale(2,BigDecimal.ROUND_UP); 

合作典范的舍入,我是能够输出圆形的BigDecimal到一个TextView使用pitch_round.ToString() ,当我在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

变化都喜欢

pitch_round.setScale(2,BigDecimal.ROUND_UP); 

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

BigDecimal是不可变的,调用这个方法不要导致原来的ob正在修改的对象

1

setScale返回一个新的BigDecimal,您将丢弃它。尝试

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

从setScale API文档:

注意,由于BigDecimal对象是不可变的,这种方法 的调用不会导致初始对象被修改,违背了 通用惯例具有名为setX mutate field X的方法。相反, setScale返回具有适当比例的对象;返回的对象 可能会或可能不会被重新分配。