2015-09-07 46 views
-4

我有一些问题将四舍五入到整数值。在我的应用程序,我有这个值250/6=41.6667。或者我得到41而不是42的值。谁能告诉我怎样才能把这个数值加到天花板上?与.5及以上的圆形双向的细胞值

这是我现在做的事:

public BigDecimal roundToHalf(double d) { 
      BigDecimal value = new BigDecimal(d); 
      value = value.setScale(0, RoundingMode.HALF_DOWN); 
      Log.d(TAG, "youcan val =" + value); 
      return value; 
    } 
///////// 
    int nowYouPay = 250; 
    int billSize= billTotals.size();// value of 6 

    int res =roundToHalf(nowYouPay/billSize);//this retunrs 41 
+2

看看[this](http://stackoverflow.com/questions/17221381/round-half-even-for-double) – Blackbelt

回答

0

整数除法:结果已经是 “四舍五入” 当你把nowYouPay/billSize。 所以你实际上是调用roundToHalf(41)而不是roundToHalf(41.666 ..)。

如果你不想分裂的结果是41,你必须使用部门与至少一个浮点参数:

((double) nowYouPay)/ billSize // 41.6666... 
nowYouPay/((double) billSize) // 41.6666... 
250.0/6      // 41.6666... 
250/6.0      // 41.6666... 
250.0/6.0      // 41.6666... 
250/6       // 41 
+0

'roundToHalf((double)(nowYouPay/billTotals.size()));'returns' 41' –

+1

看看没有味道。现在通过billTotals.size来分割nowYouPay,然后将其加倍。但是在分割之后已经是41了,所以它变成了41.0。 @DarkoPetkovski – piezol

0

试试这个

public static double roundToHalf(double d) { 
     return Math.ceil(d); 
} 

或使用本:

public static double roundToHalf(double d) { 
     return Math.round(d); 
} 

更合适,将您的整数41.6667近似为42,即值更高比0.50高整数,否则最低

与输入41.6667结果:

42.0

检查:Math Ceil

Math Round

1

您应该使用int res = Math.round(((float)nowYouPay)/billSize)

+0

答案是关于天花板,不是四舍五入 –

+0

与** .5及以上的** **到ceil值 –

+0

对不起,OP的措词不清楚,我认为它是ceil –