diff --git a/include/ydb-cpp-sdk/client/value/value.h b/include/ydb-cpp-sdk/client/value/value.h index 5fa0c343042..ca399d1eee3 100644 --- a/include/ydb-cpp-sdk/client/value/value.h +++ b/include/ydb-cpp-sdk/client/value/value.h @@ -229,6 +229,7 @@ struct TDecimalValue { std::string ToString() const; TDecimalValue(const Ydb::Value& decimalValueProto, const TDecimalType& decimalType); TDecimalValue(const std::string& decimalString, uint8_t precision, uint8_t scale); + TDecimalValue(uint64_t low, int64_t hi, uint8_t precision, uint8_t scale); TDecimalType DecimalType_; uint64_t Low_; diff --git a/src/client/value/value.cpp b/src/client/value/value.cpp index 854c7f02924..68be391af3d 100644 --- a/src/client/value/value.cpp +++ b/src/client/value/value.cpp @@ -969,6 +969,13 @@ TDecimalValue::TDecimalValue(const std::string& decimalString, ui8 precision, ui Hi_ = *(int64_t*)(buf + 8); } +TDecimalValue::TDecimalValue(uint64_t low, int64_t hi, uint8_t precision, uint8_t scale) + : DecimalType_(precision, scale) + , Low_(low) + , Hi_(hi) +{ +} + std::string TDecimalValue::ToString() const { NYdb::NDecimal::TInt128 val = NYdb::NDecimal::FromHalfs(Low_, Hi_); return NYdb::NDecimal::ToString(val, DecimalType_.Precision, DecimalType_.Scale);