如何在C++中使用分数(如 rational numbers)来精确表示小数或其他非整数值?
时间: 2024-11-16 09:20:35 浏览: 13
在C++中,通常不直接支持内置的分数数据类型,因为这是浮点数(如`float`和`double`)的领地,用于近似表示。如果你需要精确表示分数或者小数,可以自定义一个类来模拟分数的行为。这里是一个简单的例子,通过两个成员变量(分子和分母)来表示有理数:
```cpp
class RationalNumber {
public:
int numerator; // 分子
int denominator; // 分母
// 构造函数
RationalNumber(int num = 0, int den = 1) : numerator(num), denominator(den) {
if (denominator == 0)
throw std::invalid_argument("Denominator cannot be zero");
}
// 加法、减法、乘法等运算重载
RationalNumber operator+(const RationalNumber& other) const {
int new_numerator = numerator * other.denominator + other.numerator * denominator;
int new_denominator = denominator * other.denominator;
return RationalNumber(new_numerator, new_denominator);
}
// 其他运算类似,只需考虑分数的运算规则
private:
// 防止隐式转换为浮点数
RationalNumber(const float&) = delete;
RationalNumber operator=(const float&) = delete;
};
// 使用示例
RationalNumber frac1(4, 7); // 四分之七
RationalNumber frac2(3, 5); // 三分之五
RationalNumber sum = frac1 + frac2; // 现在sum是它们的和,仍为分数形式
```
阅读全文