2

Сериализирую объект при помощи JsonUtility. Вот что выходит:

введите сюда описание изображения

А вот как должно быть: введите сюда описание изображения

Собственно, вот и вся проблема :) Есть идеи?

grenqa
  • 95

1 Answers1

3

JSON сохраняет правильно.

Дело в том, что значение 0.2 не представимо точно ни в типе float, ни в типе double (поскольку не является двоичной дробью). JSON переводит значения в тип double, и получаются именно такие значения.

Проверка: https://ideone.com/TUXPL7

Заставить JSON сохранять во float невозможно, т. к. в JSON есть только double.


Если хотите «красивый» вывод, пусть в вашей программе будут значения типа double: 0.2, а не 0.2f. 0.2f при приведении к double не даёт 0.2, ничего поделать нельзя. Или форматируйте самостоятельно через string.Format или f.ToString("0.##").

VladD
  • 206,799
  • Это мне и так понятно, однако хотелось бы иметь красивые значения в файле без всяких ошибок точности – grenqa Dec 30 '17 at 15:03
  • @grenqa: Когда вы присваиваете числу типа float или double значение 0.2, вы уже допускаете ошибку точности. Число 0.2 не представимо в виде double. – VladD Dec 30 '17 at 15:05
  • @grenqa: Попробуйте вот такой простой код: double d = 0.2; Console.WriteLine(d * 64 - 12);. – VladD Dec 30 '17 at 15:08
  • Мне прекрасно известно как работают типы float и double, я просто хочу получить красивые числа в json файле, чтобы с ними было приятно работать – grenqa Dec 30 '17 at 15:09
  • @grenqa: Вы хотите, чтобы запоминались неправильные значения? Красивые = неправильные. Ну или переходите на double вместо float, если красивые значения вам реально важны. – VladD Dec 30 '17 at 15:12
  • Спасибо вам. Перешёл на double, всё работает, числа красивые – grenqa Dec 30 '17 at 15:19
  • @grenqa: Рад, что помогло! Числа с плавающей запятой — достаточно сложная тема с неприятными сюрпризами. – VladD Dec 30 '17 at 15:23