Использование go1.1.2 Win64, у меня есть программа Go, которая «marshal» представляет собой структуру, содержащую float64. Когда значение float64 не является целым числом, например. 1234.44, тогда он получает «маршал» как плавающий (json.Marshal). Однако, если это целое число, например. «1234.00» он сортируется как целое число «1234». Когда я получаю это на другом конце (Дарт), Дарт (30188) рассматривает целое число как целое число (на карте - JSON.decode). Следовательно, программа Дарт прерывается, когда представление данных с плавающей точкой (double) не содержит десятичной точки, и я пытаюсь «извлечь» ее из карты как двойной.Правильно ли идет маршал float64 в JSON?
Это, очевидно, можно решить несколькими способами (например, преобразовать в целое число, а затем преобразовать обратно в float), однако я задавался вопросом, есть ли другой (лучший) способ справиться с этой ситуацией.
Есть ли еще лучший способ справиться с этим, чем преобразовать float64 в integer?
Спасибо за решение. Я думаю, что это нужно решить на конце Дарта. Похоже, что целое число нельзя назначить двойнику в Дарте. Это кажется мне аномалией, но я согласен с тем, что я ошибаюсь, по крайней мере, с теоретической точки зрения (бросок, бросок и т. Д.). Решение, которое у меня есть, следующее: «double dAcctBal = (mAcctData ['D_AcctBal'] как num)/1;" (где mAcctData - это карта, где «D_AcctBal» может быть целым числом или двойным в зависимости от того, является ли оно целым числом). Это решение для меня выглядит немного взломанным, но если целое нельзя назначить двойнику напрямую? –
Да, я согласен, что было бы лучше решить его на конце Дарта. Я также с радостью дам вам такое решение, если бы знал, но мой опыт с Дартом * очень * ограничен. Возможно, кто-то с большим количеством знаний может найти более идиоматическое решение Дарта. – ANisus
JSON не указывает семантику его числовых литералов, поэтому более корректно использовать двойные числа, чем целые. Дарт имеет два типа номеров.Все, что содержит десятичную точку или экспоненциальную часть, должно быть двойным, а все остальное анализируется как целое число, которое в Dart обеспечивает большую точность, чем двойные. Это сохраняет как можно больше информации из номера JSON. Это требует, чтобы вы вручную использовали .toDouble, если хотите, чтобы все числа были удвоены. – lrn