假设,bodyFatPercentage是0到100之间的值, (bodyFatPercentage / 100) 将返回0.为什么? 因为你正在划分整数。 更改您的代码以使用双值,您就在正确的轨道上。 ((double)bodyFatPercentage / 100)
(bodyFatPercentage / 100)
((double)bodyFatPercentage / 100)
如果你的结果是int类型,你可能需要施放或更好 Math.Round 结果回到int。
Math.Round
首先,您应该使用调试器,以确认问题的确切来源。
但是,我预计问题是由于四舍五入。使用除法时,最好使用支持小数位的类型。
试试这个:
bodyFatAmount = (int)((bodyFatPercentage / 100f) * bodyWeight);
基本上, bodyFatPercentage / 100 总是会导致 0.xx (数学上)因为你正在使用 int 类型(不支持小数位)它将值舍入到 0 。通过使用 100f 相反,您将其中一个类型声明为float(它支持小数位),因此结果将保持小数精度( 0.xx )然后将乘以 bodyWeight 并再次得到一个浮点值(保持小数位),最后你的整体结果可以转换回一个 int 。这将再次进行,但到那时你会得到更准确的结果,例如, (int)63.22 - > 63
bodyFatPercentage / 100
0.xx
int
0
100f
bodyWeight
(int)63.22
63
另一方面,函数设置这样的全局变量,然后返回值也很奇怪。只是我的想法......
其他人确实为您提供了铸造浮动或双重编程解决方案,但是您的三年级数学课程还有另一种解决方案。乘法和除法是可传递的。
bodyFatAmount = ((bodyFatPercentage * bodyWeight) / 100);
现在通过乘以第一个你得到一个大于100的数字并且没有得到截断问题,一旦你除去它仍然会给你正确的百分比值。
可能你的价值太小,结果就像 0.something ,和 int 保持不住 . (十进制)包含值,因此它将值四舍五入 的 零 强> 。我建议你用 double 返回值。
0.something
.
double