🐛 serialize 32-bit floating-point numbers as float 32 in MessagePack (0xCA) #2196

This commit is contained in:
Niels Lohmann 2020-06-17 21:14:23 +02:00
parent e7452d8778
commit 88a37010d6
No known key found for this signature in database
GPG key ID: 7F3CEA63AE251B69
5 changed files with 64 additions and 17 deletions

View file

@ -504,8 +504,18 @@ class binary_writer
case value_t::number_float:
{
oa->write_character(get_msgpack_float_prefix(j.m_value.number_float));
write_number(j.m_value.number_float);
if (static_cast<double>(j.m_value.number_float) >= static_cast<double>(std::numeric_limits<float>::lowest()) and
static_cast<double>(j.m_value.number_float) <= static_cast<double>((std::numeric_limits<float>::max)()) and
static_cast<double>(static_cast<float>(j.m_value.number_float)) == static_cast<double>(j.m_value.number_float))
{
oa->write_character(get_msgpack_float_prefix(static_cast<float>(j.m_value.number_float)));
write_number(static_cast<float>(j.m_value.number_float));
}
else
{
oa->write_character(get_msgpack_float_prefix(j.m_value.number_float));
write_number(j.m_value.number_float);
}
break;
}