下面的类应该代表一个音符。我希望能够仅使用整数来存储音符的长度(例如 1/2 音符、1/4 音符、3/8 音符等)。但是,我还希望能够使用浮点数存储长度,以应对我处理不规则长度音符的罕见情况。
class note{
string tone;
int length_numerator;
int length_denominator;
public:
set_length(int numerator, int denominator){
length_numerator=numerator;
length_denominator=denominator;
}
set_length(double d){
length_numerator=d; // unfortunately truncates everything past decimal point
length_denominator=1;
}
}
能够使用整数而不是双精度数来存储长度对我来说很重要的原因是,在我过去使用浮点数的经验中,有时值出乎意料地不准确。例如,一个应该是 16 的数字偶尔会被神秘地存储为 16.0000000001 或 15.99999999999(通常在经历一些操作之后),这可能会在测试相等性时引起问题(因为 16!=15.99999999999)。
是否可以将变量从 int 转换为 double (变量,而不仅仅是它的值)?如果不是,那么我还能做些什么来使用整数或双精度来存储音符的长度,具体取决于我需要的类型是什么?