Почему мой номер меняется, когда я преобразовываю его из десятичного числа в число с плавающей точкой? - PullRequest
1 голос
/ 10 мая 2011

Я сохраняю десятичную точку из текстового поля в переменную, подобную этой:

 decimal hiOld = Decimal.Parse(hiCommOld.Text);

Итак, в основном hiOld хранит что-то вроде этого: 46.88. Но когда я делаю это:

 ev.hiOldNew = (float)hiOld;

Моя система хранит номер 45.6677878899988 (как-то так) в БД. Мой тип БД Float. Все, что я хочу сохранить эту переменную как 46,88 в БД.

Как мне это сделать?


Связанный: Разница между десятичной, плавающей и двойной в .NET?

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

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

Десятичное число - это тип с фиксированной точкой, который дает точное представление, а недостатком является то, что у него нет динамического диапазона, который есть у двойного.1003 *

Однако решение вашей проблемы - просто использовать правильный тип в вашей базе данных.Предполагая, что вы используете SQL Server, вам нужен десятичный тип:

http://msdn.microsoft.com/en-us/library/ms187746.aspx

1 голос
/ 10 мая 2011

Мой тип БД - Double.Все, что я хочу, чтобы сохранить эту переменную как 46,88 в БД.

Эти два предложения противоречат друг другу.Если вы хотите хранить десятичные значения точно в БД, используйте типы баз данных DECIMAL или NUMERIC.Вот для чего они.

Прочтите Руководство по плавающей запятой для подробностей.

...