2015-09-07 45 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 –