Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
zulus
Guest |
приветствую!
фокспро(set decimals to 18) и калькулятор дают 586.625 а sql server 586.62499950600 а очень хочется получить тоже самое до 2-го знака. sql server round(586.62499950600,2) = 586.62 fox round(586.625,2) = 586.63 спасибо. |
9 фев 03, 08:29 [125093] Ответить | Цитировать Сообщить модератору |
Серегей
Guest |
попробуй (round(round(value,3)),2),
насклько я помню, это проблема записи данных типа float и их округления. правда я не проверял (пока нет возможности), но по-моему так. |
9 фев 03, 09:59 [125098] Ответить | Цитировать Сообщить модератору |
zulus
Guest |
proboval, eto budet 586.63, to chto nado. Odnako eto portit resultaty dla ostalnix strok v tablitse. Pochemu vse krome sql servera govorjat cto eto ravno 586.625? |
9 фев 03, 18:29 [125169] Ответить | Цитировать Сообщить модератору |
VAT Member Откуда: Нижний Новгород Сообщений: 295 |
Да, прикольно. Если поменять умножение и деление, будет как надо - 586.62500000000
select 878.75* 741.00/(878.75+231.25) |
9 фев 03, 18:45 [125171] Ответить | Цитировать Сообщить модератору |
zulus
Guest |
spasibo VAT ! |
10 фев 03, 18:56 [125895] Ответить | Цитировать Сообщить модератору |
Crip Member Откуда: Сообщений: 2490 |
Не надо злоупотреблять типом float и неявным преобразованием
типов
|
||
11 фев 03, 10:35 [126147] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
2zulus
Если вам интересно, что сервер делает с вашими числами, то
Сервер просто пытается получить результат с наибольшей возможной точностью. 2VAT Да, прикольно. Если поменять умножение и деление, Операции с приблизительными числами не ассоциативны, т.к. при перестановке опрандов может нарушится и последовательность округления. Довольно популярно это объяснено здесь (Примечание - MS SQL использует для округления метод round up) |
||
11 фев 03, 14:58 [126471] Ответить | Цитировать Сообщить модератору |
zulus
Guest |
2All
Vsem spasibo, 2Crip is etogo sleduet, nado VSEGDA isplozovat cast pri vichislenii? V protivnom sluchae server so svoim jelaniem "poluchit maksimmalno tochny resultat" mojet nalomat drov. |
11 фев 03, 23:36 [126837] Ответить | Цитировать Сообщить модератору |
Crip Member Откуда: Сообщений: 2490 |
Вполне нормальное поведение. Он же не знает, что от него хотят.
Тот же "очень умный" фокспро может быть и делает неявные преобразования как может показаться более аккуратно, но к примеру в случае когда точно не задана длина выражения может сделать по результату первой записи. Что-типа IIF(MyColumn = 0 ,0,(878.75/(878.75+231.25))* 741.00) , в случае первого значения MyColumn = 0 создаcт колонку с numeric(1), Когда как SQL Server в соответствующем CASE все равно numeric(20,11)... Вот так вот |
12 фев 03, 10:04 [126985] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |