округление в меньшую сторону в TSQL 2005

#tsql #sql-server-2005 #decimal #rounding

#tsql #sql-server-2005 #десятичная #округление

Вопрос:

Есть ли простой способ преобразовать следующую формулу Excel в TSQL:

 ROUNDDOWN((table.OrderQty / table.PacksPerCase),0) 
  
  • таблица.OrderQty = 9
  • таблица.PacksPerCase = 5

«0» указывает, что результат будет иметь ноль знаков после запятой

Результат = 1.0

  • таблица.OrderQty = 9
  • таблица.PacksPerCase = 4

«0» указывает, что результат будет иметь ноль знаков после запятой

Результат = 2.0

Ответ №1:

Попробуйте использовать FLOOR :

Функция FLOOR возвращает наибольшее целое число, меньшее или равное указанному числовому выражению.

Ваше выражение должно быть:

 FLOOR(table.OrderQty / table.PacksPerCase) 
  

Комментарии:

1. это тоже было на востоке. Спасибо!

2. О, еще один вопрос: почему выбирается 9/5 = 1, когда оно должно быть 1,8

3. @user2984486 Поскольку оба числа являются целыми числами, SQL Server использует целочисленное деление. Если вы укажете, что хотите использовать деление с плавающей запятой с помощью (например) SELECT 9.0/5 , вы получите 1.8 .

Ответ №2:

ROUNDDOWN() округляет до нуля отрицательные числа.

Поскольку FLOOR округляется до отрицательной бесконечности, ближайший эквивалент в TSQL, о котором я могу думать ROUND , имеет function значение 1;

 ROUND((table.OrderQty / table.PacksPerCase), 0, 1) 
  

Если вы имеете дело только с положительными числами, конечно, FLOOR также будет работать хорошо.