Util: Update Format::Builder floating-point precision

This commit is contained in:
Riyyi
2022-08-03 12:06:35 +02:00
parent f08225136f
commit 8049477795
2 changed files with 13 additions and 12 deletions
+10 -9
View File
@@ -4,11 +4,12 @@
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
*/ */
#include <cstddef> // size_t #include <algorithm> // min
#include <iomanip> // setprecision #include <cstddef> // size_t
#include <ios> // defaultfloat, fixed #include <iomanip> // setprecision
#include <limits> // numeric_limits #include <ios> // defaultfloat, fixed
#include <sstream> // stringstream #include <limits> // numeric_limits
#include <sstream> // stringstream
#include <string> #include <string>
#include <string_view> #include <string_view>
@@ -26,9 +27,9 @@ void Builder::putLiteral(std::string_view literal)
} }
} }
void Builder::putF32(float number, size_t precision) const void Builder::putF32(float number, uint8_t precision) const
{ {
precision = (precision > std::numeric_limits<float>::digits10) ? 6 : precision; precision = std::min(precision, static_cast<uint8_t>(std::numeric_limits<float>::digits10));
std::stringstream stream; std::stringstream stream;
stream stream
@@ -39,9 +40,9 @@ void Builder::putF32(float number, size_t precision) const
m_builder << string; m_builder << string;
} }
void Builder::putF64(double number, size_t precision) const void Builder::putF64(double number, uint8_t precision) const
{ {
precision = (precision > std::numeric_limits<double>::digits10) ? 6 : precision; precision = std::min(precision, static_cast<uint8_t>(std::numeric_limits<double>::digits10));
std::stringstream stream; std::stringstream stream;
stream stream
+3 -3
View File
@@ -7,7 +7,7 @@
#pragma once #pragma once
#include <cstddef> // size_t #include <cstddef> // size_t
#include <cstdint> // int32_t, uint32_t, int64_t #include <cstdint> // int32_t, int64_t, uint8_t, uint32_t
#include <sstream> // stringstream #include <sstream> // stringstream
#include <string_view> #include <string_view>
@@ -26,8 +26,8 @@ public:
void putU32(uint32_t number) const { m_builder << number; } // unsigned int void putU32(uint32_t number) const { m_builder << number; } // unsigned int
void putI64(int64_t number) const { m_builder << number; } // long int void putI64(int64_t number) const { m_builder << number; } // long int
void putU64(size_t number) const { m_builder << number; } // long unsigned int void putU64(size_t number) const { m_builder << number; } // long unsigned int
void putF32(float number, size_t precision = 6) const; void putF32(float number, uint8_t precision = 6) const;
void putF64(double number, size_t precision = 6) const; void putF64(double number, uint8_t precision = 6) const;
void putCharacter(char character) const { m_builder.write(&character, 1); } void putCharacter(char character) const { m_builder.write(&character, 1); }
void putString(const std::string_view string) const { m_builder.write(string.data(), string.length()); } void putString(const std::string_view string) const { m_builder.write(string.data(), string.length()); }
void putPointer(const void* pointer) const { m_builder << pointer; } void putPointer(const void* pointer) const { m_builder << pointer; }