2011-04-05 39 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

相关问题