This commit is contained in:
CupWater
2026-08-16 15:20:11 +08:00
parent 83a75d4e76
commit feac230fef
12 changed files with 30 additions and 34 deletions
+74
View File
@@ -0,0 +1,74 @@
#ifndef BETTERSTL_BIG_DECIMAL_H
#define BETTERSTL_BIG_DECIMAL_H
#include <string>
#include <bstl/big_integer.hpp>
namespace bstl {
class BigDecimal {
public:
BigDecimal();
BigDecimal(int value);
BigDecimal(long long value);
BigDecimal(double value);
explicit BigDecimal(const std::string& value);
explicit BigDecimal(const char* value);
BigDecimal(const BigInteger& unscaledValue, int scale);
BigDecimal(const BigDecimal& other) = default;
BigDecimal& operator=(const BigDecimal& other) = default;
bool isZero() const;
int sign() const;
int getScale() const;
BigInteger getUnscaledValue() const;
std::string toString() const;
// Comparison operators
bool operator==(const BigDecimal& other) const;
bool operator!=(const BigDecimal& other) const;
bool operator<(const BigDecimal& other) const;
bool operator>(const BigDecimal& other) const;
bool operator<=(const BigDecimal& other) const;
bool operator>=(const BigDecimal& other) const;
bool operator==(int value) const;
bool operator!=(int value) const;
bool operator<(int value) const;
bool operator>(int value) const;
bool operator<=(int value) const;
bool operator>=(int value) const;
bool operator==(double value) const;
bool operator!=(double value) const;
bool operator<(double value) const;
bool operator>(double value) const;
bool operator<=(double value) const;
bool operator>=(double value) const;
// Arithmetic operators
BigDecimal operator+() const;
BigDecimal operator-() const;
BigDecimal& operator+=(const BigDecimal& other);
BigDecimal& operator-=(const BigDecimal& other);
BigDecimal& operator*=(const BigDecimal& other);
BigDecimal& operator/=(const BigDecimal& other);
BigDecimal operator+(const BigDecimal& other) const;
BigDecimal operator-(const BigDecimal& other) const;
BigDecimal operator*(const BigDecimal& other) const;
BigDecimal operator/(const BigDecimal& other) const;
BigDecimal abs() const;
BigDecimal round(int scale) const;
private:
BigInteger unscaledValue_; // 去掉小数点后的值
int scale_; // 小数点后的位数
static void alignScale(BigInteger& lhs, int& lhsScale,
BigInteger& rhs, int& rhsScale);
};
} // namespace bstl
#endif //BETTERSTL_BIG_DECIMAL_H