Структура сущности C #: чтение высоких значений с плавающей запятой, кажется, не работает правильно? - PullRequest
0 голосов
/ 07 апреля 2011

Я использую Entity Framework, который генерирует код для чтения БД.Но, похоже, что в БД сохраненное значение FLOAT 999 999 999 будет читаться как 1E9.

Как включить, чтобы автоматически сгенерированный код возвращал правильное значение 999 999 999, а не 1E9?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Я думаю, что проблема не имеет ничего общего с EF или SQL Server.Даже в .NET вы не можете хранить значение 999 999 999 в формате с плавающей запятой:

float x = 999999999;

x будет иметь значение 1E + 9.Точность float недостаточно высока для сохранения этого значения (только 7-значная мантисса).Свойство float в классе сопоставляется со столбцом real в SQL Server (который имеет ту же точность).

Единственное решение - использовать double или decimal в вашем классе (double сопоставляется с float в SQL Server, который имеет точность 15 цифр).

Возможно, в SQL Server есть тип float, который позволяет сохранить значение 999 999 999, а также float в качестве типа свойстваваш класс, который, к сожалению, другой тип.Это сбивает с толку, да: float в SQL Server соответствует double в .NET ( НЕ ДО float!)

0 голосов
/ 07 апреля 2011

Обычно 1E9 - это дисплей, а не значение. То есть, какой бы элемент управления вы ни использовали для отображения, он усекает его до 1E9 (как это делает Excel, если вы уменьшаете ячейку).

Вы уверены, что это фактическое значение, возвращаемое из БД?

...