День добрый.
Использую MS SQL Server 2005 в связке с ASP.NET 2.0.
В коде, через параметризированный добавляю запись со значением с плавающей точкой.
Например 5.7, в базе оказывается число 5,86999988555908.
Здравствуйте, _orion_, Вы писали:
__>День добрый. __>Использую MS SQL Server 2005 в связке с ASP.NET 2.0. __>В коде, через параметризированный добавляю запись со значением с плавающей точкой. __>Например 5.7, в базе оказывается число 5,86999988555908.
__>Как это побороть ?
Вы хотите побороть саму природу типа данных с приближенной точностью.
Переходите на "точные" типы данных, numeric, например.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, _orion_, Вы писали: __>>Например 5.7, в базе оказывается число 5,86999988555908.
MC>Это не опечатка? 5.7 и 5.8699...? Слишком уж большая ошибка. Какой тип данных в базе используете? Каким кодом в базу суете?
Да опечатался конечно же. Вместо 5,87 получаю 5,86999988555908.
_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
Здравствуйте, _orion_, Вы писали: __>Да опечатался конечно же. Вместо 5,87 получаю 5,86999988555908.
Тогда это вполне нормально — такова специфика чисел с плавающей точкой. Если не нужна 100% точность — такая погрешность особо не помешает (единственное, может, стоит задуматься о real вместо float). Все равно при выводе результата юзеру будет округление до 2-4 знаков после запятой (вот от количества знаков и зависит, что использовать: float или real), и он ничего не заметит. Если нужна 100% точность — используйте decimal/numeric (или какой там аналог у ораклового NUMBER — который с фиксированной запятой, и нет погрешности представления десятичных дробей), money/smallmoney (вроде имеет какие-то особенности связанные с округлением копеек-центов) или вообще простое целое число.