【发布时间】:2016-05-13 11:14:50
【问题描述】:
我有这些变量
distance = 945
speed = 614
我想以小时和分钟为单位获取时间,因此我将距离/速度相除以获得小时数。现在,如果我想将分钟作为整数,我有以下代码:
int minutes;
minutes = (float) (distance%speed) / speed * 60;
这个表达式给出了 32 分钟的值,但是,当我第一次尝试时,我想让代码更“可读”,我尝试了以下选项,结果为 0:
minutes = (float) ( (distance%speed) / speed * 60 );
minutes = (float) ( (distance%speed) / speed ) * 60;
请注意,括号是添加的并且位于不同的位置,所以为什么在我看来很好的地方使用括号会干扰计算并在变量中设置 0 的值。我想这与类型转换过程有关,但括号位于应该使表达式更清晰的位置。
我有正确的答案并且程序可以正常运行,但我想在以后的场合中理解这一点,因为我花了一点时间玩括号。谢谢
【问题讨论】:
-
为了使代码更具可读性,可以考虑添加注释来指定距离和速度的单位,或者更改变量名:distance_metres、speed_metres_per_sec等。
-
您为什么希望演员表遵循分配规律?是
1 / (2 + 3) == 1 / 2 + 3?无论哪种方式,该代码都没有多大意义。你的编译器应该抱怨。阅读 C 信息页面以获得一些非常有用的建议。并提供minimal reproducible example。 -
@Chritian - Kingsley 的评论(添加单位)实际上非常好,无论您的实际变量名称如何。
-
在 C++ 中有更好的解决方案使用Boost.Units
-
除非真的需要,否则不要使用
float。一般首选double
标签: c casting parentheses