Poco::MongoDB

class Decimal128

Library: MongoDB
Package: MongoDB
Header: Poco/MongoDB/Decimal128.h

Description

Represents an IEEE 754-2008 decimal128 floating-point value (BSON TypeId 0x13, available since MongoDB 3.4). Used wherever exact decimal representation matters — currency, ledger entries, scientific data — since binary double cannot represent 0.1 exactly.

Storage is two Poco::UInt64 halves matching the BSON wire format (16 bytes, little-endian, low half first then high half). The class supports BSON serialization, canonical string conversion per IEEE 754-2008 Section 5.12.4, parsing simple decimal literals, and equality comparison. It does not implement decimal arithmetic; users who need to operate on values are expected to round-trip through std::string or use an external decimal-arithmetic library.

Member Summary

Member Functions: fromString, high, isInfinite, isNaN, isNegative, low, nan, negativeInfinity, negativeZero, operator !=, operator ==, positiveInfinity, positiveZero, toString

Types Aliases

Ptr

using Ptr = Poco::SharedPtr < Decimal128 >;

Constructors

Decimal128

Decimal128();

Creates a Decimal128 representing positive zero (0E0).

Decimal128

Decimal128(
    Poco::UInt64 low,
    Poco::UInt64 high
);

Creates a Decimal128 from the raw 128 bits, expressed as low and high 64-bit halves matching the on-wire layout.

Destructor

~Decimal128

~Decimal128() = default;

Member Functions

fromString static

static Decimal128 fromString(
    const std::string & s
);

Parses a decimal string into a Decimal128. Accepts the canonical forms produced by toString(): "NaN" (case insensitive), "Infinity" / "-Infinity" / "Inf" / "-Inf", and finite decimal literals with optional sign, optional fractional part, and optional exponent ("E"/"e" prefix). Throws Poco::SyntaxException on malformed input or Poco::RangeException when the coefficient exceeds 34 decimal digits or the exponent is out of the decimal128 range.

high inline

[[nodiscard]]
Poco::UInt64 high() const noexcept;

isInfinite

[[nodiscard]]
bool isInfinite() const noexcept;

isNaN

[[nodiscard]]
bool isNaN() const noexcept;

isNegative

[[nodiscard]]
bool isNegative() const noexcept;

Includes -0, -Inf and -NaN.

low inline

[[nodiscard]]
Poco::UInt64 low() const noexcept;

nan static

static Decimal128 nan();

negativeInfinity static

static Decimal128 negativeInfinity();

negativeZero static

static Decimal128 negativeZero();

operator != inline

bool operator != (
    const Decimal128 & other
) const noexcept;

operator == inline

bool operator == (
    const Decimal128 & other
) const noexcept;

positiveInfinity static

static Decimal128 positiveInfinity();

positiveZero static

static Decimal128 positiveZero();

toString

[[nodiscard]]
std::string toString() const;

Returns the canonical decimal string per IEEE 754-2008 Section 5.12.4: special values render as "NaN", "Infinity", "-Infinity"; finite values render in scientific or non-scientific notation depending on the adjusted exponent.