1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Use num_scientific (Grisu2) when stringifying JSON with full precision

This commit is contained in:
Aaron Franke
2025-07-21 08:27:21 -07:00
parent 1ce3101fbc
commit a238af4d20
3 changed files with 30 additions and 23 deletions

View File

@@ -82,11 +82,18 @@ void JSON::_stringify(String &r_result, const Variant &p_var, const String &p_in
return;
}
const double magnitude = std::log10(Math::abs(num));
const int total_digits = p_full_precision ? 17 : 14;
const int precision = MAX(1, total_digits - (int)Math::floor(magnitude));
r_result += String::num(num, precision);
if (p_full_precision) {
const String num_sci = String::num_scientific(num);
if (num_sci.contains_char('.') || num_sci.contains_char('e')) {
r_result += num_sci;
} else {
r_result += num_sci + ".0";
}
} else {
const double magnitude = std::log10(Math::abs(num));
const int precision = MAX(1, 14 - (int)Math::floor(magnitude));
r_result += String::num(num, precision);
}
return;
}
case Variant::PACKED_INT32_ARRAY: