我已经开始使用“Stephen Prate的C ++ Primer”学习C ++,我目前正在尝试完成其中一个练习。我想知道我是否应该宣布arc_to_minute& arc_to_degree作为float或者像我一样将它们转换为float。欢迎任何提示!
#include <iostream>
int main()
{
using namespace std;
cout.setf(ios_base::fixed, ios_base::floatfield);
const int arc_to_minute = 60;
const int arc_to_degree = 60;
float degrees;
float minutes;
int seconds;
cout << "Degrees: ";
cin >> degrees;
cout << "Minutes: ";
cin >> minutes;
cout << "Seconds: ";
cin >> seconds;
//convert seconds to minutes and add
minutes = minutes + seconds / float (arc_to_minute);
//covert minutes to degrees and add
degrees = degrees + minutes / float (arc_to_degree);
cout << degrees;
}
答案 0 :(得分:4)
让它们浮动,当你所有的计算都以浮点形式完成时,它们没有理由成为整数:
const float arc_to_minute = 60.0f;
const float arc_to_degree = 60.0f;
请记住,在常量值的情况下,无论如何都会在编译时完成转换,因此这纯粹是一种设计选择,没有性能变化。但一般来说,如果你发现自己正在投射,你可能会选择不正确的数据类型。
对于它的价值,当你需要强制转换时,你应该更喜欢C ++样式转换。例如:
static_cast<float>(arc_to_minute);
答案 1 :(得分:2)
将它们声明为float(或更好,双倍),因为这就是你将如何使用它们。
答案 2 :(得分:0)
我认为没有任何问题。快乐学习!
编辑:但是对于投射,更喜欢static_cast。