2011-04-05 74 views
3

好吧即時通訊我的應用程序和我的計算中的問題非常確定,這是由於小數到很長。這是無論如何都需要完成的事情,因爲它將大大縮短我需要的代碼數量。將我的小數點浮點數舍入到最接近的一半或整數?

下面

是我現在怎麼有我的代碼的這部分...

float ab1 = [abdomen1Input.text floatValue]; 
float ab2 = [abdomen2Input.text floatValue]; 
float ab3 = [abdomen3Input.text floatValue]; 
float hip1 = [hips1Input.text floatValue]; 
float hip2 = [hips2Input.text floatValue]; 
float hip3 = [hips3Input.text floatValue]; 
float neck1 = [neck1Input.text floatValue]; 
float neck2 = [neck2Input.text floatValue]; 
float neck3 = [neck3Input.text floatValue]; 
float height1 = [heightInput.text floatValue]; 
float neckAvg; 
float abHipAvg; 
float cirVal; 

(abHipAvg = (((ab1+ab2+ab3)/3)+((hip1+hip2+hip3)/3))); 

(neckAvg = ((neck1+neck2+neck3)/3)); 

(cirVal = (abHipAvg - neckAvg)); 

什麼,我需要做的是一輪「abHipAvg」和「neckAvg」到最近的0.5或0.0。用戶只會進入.25,.5或.75,但是一旦我將這些數字除以3,我需要將該答案向上或向下舍入到最接近的一半,以便其餘的計算能夠正常工作。我試圖通過在這裏尋找一些問題來尋找解決方案,因爲我看過一個類似於此之前,我只是不記得在搜索中鍵入或輸入什麼。如果任何人都能指出我正確的方向,我會非常感激。

回答

7

最簡單的方法是把你的最終號碼,時間2和輪。然後除以2.

(abHipAvg = (((ab1+ab2+ab3)/3)+((hip1+hip2+hip3)/3))); 
abHipAvg = roundf(abHipAvg * 2.0f)/2.0f; 

和相同的頸部AVG。

+1

感謝nicki多數民衆贊成這就是我需要:) – 2011-04-05 12:07:10

+1

這對我工作︰圓(價值* 100.0f)/ 100.0f; – rodowi 2012-05-04 21:05:59

+0

你可以通過除以1.5而不是3來避免乘法:'abHipAvg = roundf((ab1 + ab2 + ab3)/1.5+(hip1 + hip2 + hip3)/1.5)/ 2.0f'。如果你知道它不會溢出,你可能可以合併這些總和。 – 2016-11-16 15:40:32

相關問題