Я читаю из файла JSON с помощью jsoncpp. Когда я пишу обратно в файл, мои значения с плавающей точкой немного отключены. Для тестирования я решил разобрать файл на Json :: Value, а затем записать это значение обратно в файл. Я ожидаю, что он будет выглядеть одинаково, но вместо этого значения float разные.Jsoncpp неправильно записывает значения с плавающей запятой
Пример:
"Parameters":
{
"MinXValue": 0.1,
"MaxXValue": 0.15,
"MinYValue": 0.25,
"MaxYValue": 1.1,
"MinObjectSizeValue": 1
}
пишет:
"Parameters":
{
"MinXValue": 0.10000000000000001,
"MaxXValue": 0.14999999999999999,
"MinYValue": 0.25,
"MaxYValue": 1.1000000238418579,
"MinObjectSizeValue": 1
}
Вы можете заметить, что 0,25 не изменится, даже если все остальные поплавки делали. Любая идея, что здесь происходит?
Некоторые значения с плавающей запятой могут быть точно представлены в двоичном формате, а некоторые не могут. То, что вы видите, является ближайшим представлением ваших ценностей. –
Номера с плавающей точкой не точны. Они являются лучшим представлением в ограниченной памяти. PS 0.25 - четверть - сумма, чтобы работать с бинарными ;-) –
Спасибо за разъяснение. Есть ли вообще избежать этого? – SFBA26