Made doubles output with higher precision in JSON and elsewhere.

Change-Id: I5dd8f3a7c315c40b86a67aba5c2cca4d36363523
Tested: on Linux.
This commit is contained in:
Wouter van Oortmerssen
2018-01-22 10:11:51 -08:00
parent 8df2d9a3ef
commit bbf4dac6a3
2 changed files with 11 additions and 4 deletions

View File

@@ -76,12 +76,15 @@ inline std::string NumToString<unsigned long long>(unsigned long long t) {
#endif // defined(FLATBUFFERS_CPP98_STL)
// Special versions for floats/doubles.
template<> inline std::string NumToString<double>(double t) {
template<typename T> std::string FloatToString(T t, int precision) {
// to_string() prints different numbers of digits for floats depending on
// platform and isn't available on Android, so we use stringstream
std::stringstream ss;
// Use std::fixed to surpress scientific notation.
ss << std::fixed << t;
ss << std::fixed;
// Default precision is 6, we want that to be higher for doubles.
ss << std::setprecision(precision);
ss << t;
auto s = ss.str();
// Sadly, std::fixed turns "1" into "1.00000", so here we undo that.
auto p = s.find_last_not_of('0');
@@ -91,8 +94,12 @@ template<> inline std::string NumToString<double>(double t) {
}
return s;
}
template<> inline std::string NumToString<double>(double t) {
return FloatToString(t, 12);
}
template<> inline std::string NumToString<float>(float t) {
return NumToString(static_cast<double>(t));
return FloatToString(t, 6);
}
// Convert an integer value to a hexadecimal string.

View File

@@ -3,7 +3,7 @@
x: 1.0,
y: 2.0,
z: 3.0,
test1: 3.0,
test1: 3.14159265359,
test2: "Green",
test3: {
a: 10,