A representation of the Spanner NUMERIC type: an exact decimal value with a maximum integer precision (kIntPrecision) and rounding to a maximum fractional precision (kFracPrecision).
A Decimal can be constructed from, and converted to a std::string, a double, or any integral type. See the MakeDecimal() factory functions, the ToString() member function, and the ToDouble()/ToInteger() free functions.
Decimal values can be copied/assigned/moved, compared for equality, and streamed.
Example
auto d = spanner::MakeDecimal<spanner::DecimalMode::kGoogleSQL>(42).value();
assert(d.ToString() == "42");
assert(spanner::ToInteger<int>(d).value() == 42);
Constructors
Decimal(Decimal &&)
Regular value type, supporting copy, assign, move.
Parameter
Name
Description
Decimal &&
Decimal(Decimal const &)
Regular value type, supporting copy, assign, move.
Parameter
Name
Description
Decimal const &
Decimal()
A zero value.
Operators
operator=(Decimal &&)
Regular value type, supporting copy, assign, move.
Parameter
Name
Description
Decimal &&
Returns
Type
Description
Decimal &
operator=(Decimal const &)
Regular value type, supporting copy, assign, move.
Parameter
Name
Description
Decimal const &
Returns
Type
Description
Decimal &
Functions
ToString() const &
Conversion to a decimal-string representation of the Decimal in one of the following forms:
0 // value == 0
-?0.[0-9]*[1-9] // 0 < abs(value) < 1
-?[1-9][0-9](.[0-9][1-9])? // abs(value) >= 1
NaN // "not a number" for kPostgreSQL mode
Note: The string never includes an exponent field.
Returns
Type
Description
std::string const &
ToString() &&
Conversion to a decimal-string representation of the Decimal in one of the following forms:
0 // value == 0
-?0.[0-9]*[1-9] // 0 < abs(value) < 1
-?[1-9][0-9](.[0-9][1-9])? // abs(value) >= 1
NaN // "not a number" for kPostgreSQL mode
Note: The string never includes an exponent field.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-14 UTC."],[[["\u003cp\u003eThe webpage provides documentation for the \u003ccode\u003eDecimal\u003c/code\u003e class in the Google Cloud Spanner C++ library, which represents an exact decimal value.\u003c/p\u003e\n"],["\u003cp\u003eThe latest version of the \u003ccode\u003eDecimal\u003c/code\u003e class is 2.37.0-rc, and the page lists a comprehensive history of available versions, going back to version 2.11.0.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eDecimal\u003c/code\u003e objects can be constructed from and converted to \u003ccode\u003estd::string\u003c/code\u003e, \u003ccode\u003edouble\u003c/code\u003e, or integral types, and provides functions to do so, including \u003ccode\u003eToString()\u003c/code\u003e, \u003ccode\u003eToDouble()\u003c/code\u003e, and \u003ccode\u003eToInteger()\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eDecimal\u003c/code\u003e objects support common operations such as copying, assignment, moving, equality comparison, and streaming, with dedicated operators and constructors available.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eToString()\u003c/code\u003e function converts \u003ccode\u003eDecimal\u003c/code\u003e to a decimal-string representation, following specific formats for zero values, values between 0 and 1, and values greater than or equal to 1, and it can also represent NaN for PostgreSQL mode.\u003c/p\u003e\n"]]],[],null,["# Class Decimal<> (2.42.0-rc)\n\nVersion latestkeyboard_arrow_down\n\n- [2.42.0-rc (latest)](/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.41.0](/cpp/docs/reference/spanner/2.41.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.40.0](/cpp/docs/reference/spanner/2.40.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.39.0](/cpp/docs/reference/spanner/2.39.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.38.0](/cpp/docs/reference/spanner/2.38.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.37.0](/cpp/docs/reference/spanner/2.37.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.36.0](/cpp/docs/reference/spanner/2.36.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.35.0](/cpp/docs/reference/spanner/2.35.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.34.0](/cpp/docs/reference/spanner/2.34.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.33.0](/cpp/docs/reference/spanner/2.33.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.32.0](/cpp/docs/reference/spanner/2.32.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.31.0](/cpp/docs/reference/spanner/2.31.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.30.0](/cpp/docs/reference/spanner/2.30.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.29.0](/cpp/docs/reference/spanner/2.29.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.28.0](/cpp/docs/reference/spanner/2.28.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.27.0](/cpp/docs/reference/spanner/2.27.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.26.0](/cpp/docs/reference/spanner/2.26.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.25.1](/cpp/docs/reference/spanner/2.25.1/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.24.0](/cpp/docs/reference/spanner/2.24.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.23.0](/cpp/docs/reference/spanner/2.23.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.22.1](/cpp/docs/reference/spanner/2.22.1/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.21.0](/cpp/docs/reference/spanner/2.21.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.20.0](/cpp/docs/reference/spanner/2.20.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.19.0](/cpp/docs/reference/spanner/2.19.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.18.0](/cpp/docs/reference/spanner/2.18.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.17.0](/cpp/docs/reference/spanner/2.17.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.16.0](/cpp/docs/reference/spanner/2.16.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.15.1](/cpp/docs/reference/spanner/2.15.1/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.14.0](/cpp/docs/reference/spanner/2.14.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.13.0](/cpp/docs/reference/spanner/2.13.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.12.0](/cpp/docs/reference/spanner/2.12.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal)\n- [2.11.0](/cpp/docs/reference/spanner/2.11.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal) \nA representation of the Spanner NUMERIC type: an exact decimal value with a maximum integer precision (kIntPrecision) and rounding to a maximum fractional precision (kFracPrecision). \nA [`Decimal`](/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Decimal) can be constructed from, and converted to a `std::string`, a `double`, or any integral type. See the `MakeDecimal()` factory functions, the [`ToString()`](/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Decimal#classgoogle_1_1cloud_1_1spanner_1_1Decimal_1ab71ce8fce1c807d7347a04eee60e6d85) member function, and the [`ToDouble()`](/cpp/docs/reference/spanner/latest/namespacegoogle_1_1cloud_1_1spanner)/[`ToInteger()`](/cpp/docs/reference/spanner/latest/namespacegoogle_1_1cloud_1_1spanner) free functions.\n\n[`Decimal`](/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Decimal) values can be copied/assigned/moved, compared for equality, and streamed.\n\n###### Example\n\n auto d = spanner::MakeDecimal\u003cspanner::DecimalMode::kGoogleSQL\u003e(42).value();\n assert(d.ToString() == \"42\");\n assert(spanner::ToInteger\u003cint\u003e(d).value() == 42);\n\nConstructors\n------------\n\n### Decimal(Decimal \\&\\&)\n\nRegular value type, supporting copy, assign, move.\n\n### Decimal(Decimal const \\&)\n\nRegular value type, supporting copy, assign, move.\n\n### Decimal()\n\nA zero value.\n\nOperators\n---------\n\n### operator=(Decimal \\&\\&)\n\nRegular value type, supporting copy, assign, move.\n\n### operator=(Decimal const \\&)\n\nRegular value type, supporting copy, assign, move.\n\nFunctions\n---------\n\n### ToString() const \\&\n\nConversion to a decimal-string representation of the [`Decimal`](/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Decimal) in one of the following forms: \n- 0 // value == 0\n- -?0.\\[0-9\\]\\*\\[1-9\\] // 0 \\\u003c abs(value) \\\u003c 1\n- -?\\[1-9\\]\\[0-9\\]*(.\\[0-9\\]*\\[1-9\\])? // abs(value) \\\u003e= 1\n- NaN // \"not a number\" for kPostgreSQL mode\n\nNote: The string never includes an exponent field.\n\n### ToString() \\&\\&\n\nConversion to a decimal-string representation of the [`Decimal`](/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Decimal) in one of the following forms: \n- 0 // value == 0\n- -?0.\\[0-9\\]\\*\\[1-9\\] // 0 \\\u003c abs(value) \\\u003c 1\n- -?\\[1-9\\]\\[0-9\\]*(.\\[0-9\\]*\\[1-9\\])? // abs(value) \\\u003e= 1\n- NaN // \"not a number\" for kPostgreSQL mode\n\nNote: The string never includes an exponent field."]]