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"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[],[],null,["# Class Decimal<> (2.39.0)\n\nVersion 2.39.0keyboard_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/2.39.0/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/2.39.0/classgoogle_1_1cloud_1_1spanner_1_1Decimal#classgoogle_1_1cloud_1_1spanner_1_1Decimal_1ab71ce8fce1c807d7347a04eee60e6d85) member function, and the [`ToDouble()`](/cpp/docs/reference/spanner/2.39.0/namespacegoogle_1_1cloud_1_1spanner)/[`ToInteger()`](/cpp/docs/reference/spanner/2.39.0/namespacegoogle_1_1cloud_1_1spanner) free functions.\n\n[`Decimal`](/cpp/docs/reference/spanner/2.39.0/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/2.39.0/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/2.39.0/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."]]