2015-12-03 5 views
1

Im, использующий веб-API с использованием JSON, где одно из свойств объекта, который я возвращаю, имеет тип FLOAT.C# JSONConvert Изменение значения поплавка?

После ввода данных в базу данных я начал замечать некоторые странные результаты здесь и там. Я только что прошел через код, и я вижу, что значение свойства float «PERSUNQ»: 124736684.0.

Однако минута, что я прикасаюсь данные в формате JSON, используя JSONConvert значение волшебно меняется: 124736688.0

GRSAPIData = client.DownloadString(GRSURL); <!--- value is correct 

Rootobject root = (Rootobject)JsonConvert.DeserializeObject<Rootobject>(GRSAPIData); <-- value is magically changed 

Две линии выше один за другим (без кода между ними), и я assue вас Я проверил всюду, и я сам не меняю значение.

Есть ли что-то, о чем я должен знать при использовании JSONConvert при работе с поплавками, которые могут объяснить это поведение?

Заранее спасибо

+0

Можете ли вы загрузить свой класс JSON и Rootobject? – Icet

+0

Пожалуйста, покажите короткую, но полную программу, демонстрирующую проблему. Я сомневаюсь, что база данных имеет значение здесь. –

+0

Да, проблема в том, что я не могу опубликовать что-либо слишком подробное, как это делается для правительственного проекта, но я вижу, что я могу сделать – Adamski343

ответ

2

float имеет только 7 цифр точности - что приводит к проблеме, которую вы видите. Вы можете увидеть это, не получая JSON участие на всех:

using System; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     float f = 124736684.0f; 
     Console.WriteLine(f.ToString("r")); // Round-trip 
    } 
} 

Выход:

124736688 

В основном, ближе всего представима float значение 124736684 является 124736688.

Похоже, что вы, вероятно, следует использовать double вместо - или потенциально decimal, в зависимости от того, какое значение предназначено для представления.

+0

: \ Christ это раздражает. Схема данных от поставщика имеет это поле в виде поплавка. Наверное, я должен попытаться преобразовать это в двойное. Не верю, что я этого не видел. Спасибо за ваш ответ +1 к вам. – Adamski343

Смежные вопросы