2014-09-22 51 views
4

我有以下場景,讓我們假設125,250,500是基於舍入的舍入參數。根據參數在java中舍入double值

  1. 當舍入參數爲125然後我需要四捨五入到1/8美元, 即,值= 10.01則它應該返回10.125 值= 110.2則它應該返回110.250

  2. 當舍入參數爲250,然後我需要四捨五入到二十五美分, 即價值= 10.01,那麼它應該返回10.250 值= 110.3那麼它應該返回110.500

  3. 當舍入參數爲500 n個I需要四捨五入到半美元, 即價值= 10.01,那麼它應該返回10.500 值= 110.6那麼它應該返回111

我一直在使用Math.round編寫的代碼(8F *值/ 8F),該舍入到最近的1/8美元,但舍入應達始終但對我來說10.01四捨五入到10

回答

1

我一直在使用Math.round編寫的代碼(8F *值/ 8F)哪一輪到最近的1/8美元

不,它不。它四捨五入到最接近的整數。

嘗試例如Math.round(((8f+1/8f) * value))/8f.

1

打破它管理的步驟,沒有價值試圖做到這一點的一條線。所以:

有多少八分之一的價值?

float dollar8ths = value * 8f; 

回合,最多:

int dollar8thsRoundedUp = (int) Math.ceil(dollar8ths); 

最後,放回美元:

float dollars = dollar8thsRoundedUp/8f; 
3

首先,你不是四捨五入,你正在做一個天花板。

此代碼你想要做什麼:

Math.ceil(n * 1000/factor) * factor/1000; 

這裏是捆綁爲一個方法的代碼:

public static double ceil(double n, int factor) { 
    return Math.ceil(n * 1000/factor) * factor/1000; 
} 

注意,沒有鑄造是必需的,因爲在Java arithemtic如果一個操作數是double,其他人也自動(並安全地)擴大到double

1

這應該做你想要什麼:

double myRound(double val, int param) 
{ 
    val = 1000 * val/param; 
    val = Math.ceil(val); 
    return val * param/1000; 
} 

例如:

System.out.println(myRound(10.01, 125)); 

10.125