我有这些变量
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的值。我想这和打字过程有关,但括号在某些地方应该可以使表达更清楚。
我有正确的答案,程序运行正常,但我想在以后的场合理解这一点,因为我花了一点时间玩括号。谢谢你
最佳答案
所以为什么在我看来很好的地方使用圆括号会干扰计算,并在变量中设置0的值。
这是因为多余的括号会使第二个语句中的转换无效。
在你的第一份声明中:()
这里首先评估float
。
但在你的第二份声明中:minutes = (float) (distance%speed) / speed * 60;
您的额外(float) (distance%speed)
将导致(float) ( (distance%speed) / speed * 60 );
首先被评估,因此cast()
变得不相关。
我想让代码更“可读”
与“可读性”相关,虽然在这里添加更多的括号肯定没有帮助,但Kingsley(添加单元)的建议是一个好方法。例如,
int distance_m = 945;
int speed_kph = 614;
关于c - C语言中的类型转换和括号的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35190918/