Округление до ближайших 5 центов - PullRequest
1 голос
/ 25 марта 2020

У меня есть требование, согласно которому значение суммы должно быть округлено с точностью до 5 центов до 2 десятичных разрядов.

 Example:
 255.263745  to 255.25  -- 26 taken to 25
 57.2115     to 57.20  -- 21 taken to 20
 100.75586   to 100.75 

Я пробовал следующие способы, но не смог получить желаемый результат.

select (RIGHT('00000000'+LEFT( CAST(CAST( ISNULL(198.85,0)*ISNULL(128.370,0) AS DECIMAL( 15,0)) AS VARCHAR( 15 )), 8 ), 8 ))

select CEILING(((ISNULL(198.85,0) * (ISNULL(128.370,0)/100)))/.05) *.05

Рабочий образец:

SELECT REPLACE(FORMAT(CAST(ROUND(((ISNULL(198.85,0) * (ISNULL(128.370,0)/100)/05)),2)*05 AS DECIMAL(10,2)),'000000.00'),'.','') AS [Actual Amount]

Выход: 00025525

1 Ответ

5 голосов
/ 25 марта 2020

Вы можете сделать:

round(mycol / 5, 2) * 5

Или, если вы действительно хотите быть строгим в отношении выходного типа данных:

cast(round(mycol / 5, 2) * 5 as decimal(10,2))

Демонстрация на DB Fiddle :

select mycol, cast(round(mycol / 5, 2) * 5 as decimal(10,2)) res
from ( values (255.263745), (57.2115), (100.75586) ) t(mycol)
mycol      | res   
:--------- | :-----
255.263745 | 255.25
57.211500  | 57.20 
100.755860 | 100.75
...