我在研究CS50 PS 2的可读性,在等级上得到的输出不正确。
调试后发现输入值是正确的,但输出是错误的。用输入值手工计算,得到了正确的答案。
我简化了公式的第一部分,发现是这样的。
用以下的数值 214
对于 L
和 56
对于 W
,表达式。
float R = (0.0588 * (L / W) * 100);
输出 17.64
,这是错误的。
当我使用:
float R = (0.0588 * L / W * 100);
它的输出是 22.47
,这是正确的。
我想不通为什么。
的表达式
float R = (0.0588 * (L / W) * 100);
将发展到
float R = 0,0588 * 3 * 100;
也就是 17.64
,当四舍五入到小数点后两位时。
的结果是 L / W
整数除法 是一个 int
因此,结果是 3.8...
将被截断为 3
.
为了纠正这种情况,至少要有一个变数 W
或 L
必须是 float
或 double
.
表达式
float R = (0.0588 * L / W * 100);
将发展到
float R = ((0,0588 * 214) / 24) * 100 //parenthesis to illustrate the sequence
其中输出正确的结果。22.47
,当四舍五入到小数点后两位时。
很有可能两个 L
和 W
被宣布为 int
. 那么在第一种情况下: (L/W)
也将被视为 int
,因此被浮动,从而导致错误。
附注:即使它们被声明为 float
或 double
,浮点算术意味着乘除法不是关联的。