You've already forked godot
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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user