Проблема с плавающей точкой в SQL Server 2005
От: _orion_  
Дата: 08.04.08 13:37
Оценка:
День добрый.
Использую MS SQL Server 2005 в связке с ASP.NET 2.0.
В коде, через параметризированный добавляю запись со значением с плавающей точкой.
Например 5.7, в базе оказывается число 5,86999988555908.

Как это побороть ?
Re: Проблема с плавающей точкой в SQL Server 2005
От: pkarklin  
Дата: 08.04.08 13:51
Оценка:
Здравствуйте, _orion_, Вы писали:

__>День добрый.

__>Использую MS SQL Server 2005 в связке с ASP.NET 2.0.
__>В коде, через параметризированный добавляю запись со значением с плавающей точкой.
__>Например 5.7, в базе оказывается число 5,86999988555908.

__>Как это побороть ?


Вы хотите побороть саму природу типа данных с приближенной точностью.

Переходите на "точные" типы данных, numeric, например.
Re: Проблема с плавающей точкой в SQL Server 2005
От: Mr.Cat  
Дата: 08.04.08 14:08
Оценка:
Здравствуйте, _orion_, Вы писали:
__>Например 5.7, в базе оказывается число 5,86999988555908.

Это не опечатка? 5.7 и 5.8699...? Слишком уж большая ошибка. Какой тип данных в базе используете? Каким кодом в базу суете?
Re[2]: Проблема с плавающей точкой в SQL Server 2005
От: _orion_  
Дата: 08.04.08 14:10
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, _orion_, Вы писали:

__>>Например 5.7, в базе оказывается число 5,86999988555908.

MC>Это не опечатка? 5.7 и 5.8699...? Слишком уж большая ошибка. Какой тип данных в базе используете? Каким кодом в базу суете?


Да опечатался конечно же. Вместо 5,87 получаю 5,86999988555908.
Re: Проблема с плавающей точкой в SQL Server 2005
От: . Великобритания  
Дата: 08.04.08 23:04
Оценка:
_orion_ wrote:

> День добрый.

> Использую MS SQL Server 2005 в связке с ASP.NET 2.0.
> В коде, через параметризированный добавляю запись со значением с
> плавающей точкой.
> Например 5.7, в базе оказывается число 5,86999988555908.
>
> Как это побороть ?
Не использовать плавающую точку, использовать фиксированную, тип MONEY или DECIMAL, особенно, если это финансовые расчёты. А если что-нибудь неважное считается, то что плохого в 5,86999988555908?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Проблема с плавающей точкой в SQL Server 2005
От: Mr.Cat  
Дата: 10.04.08 08:19
Оценка:
Здравствуйте, _orion_, Вы писали:
__>Да опечатался конечно же. Вместо 5,87 получаю 5,86999988555908.

Тогда это вполне нормально — такова специфика чисел с плавающей точкой. Если не нужна 100% точность — такая погрешность особо не помешает (единственное, может, стоит задуматься о real вместо float). Все равно при выводе результата юзеру будет округление до 2-4 знаков после запятой (вот от количества знаков и зависит, что использовать: float или real), и он ничего не заметит. Если нужна 100% точность — используйте decimal/numeric (или какой там аналог у ораклового NUMBER — который с фиксированной запятой, и нет погрешности представления десятичных дробей), money/smallmoney (вроде имеет какие-то особенности связанные с округлением копеек-центов) или вообще простое целое число.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.