rounding, and truncating a number

I have a SQL Server query that is returning my values with many values beyond the decimal point, when I only need it to display two numbers beyond the decimal point. For example,
they are returned as
33.3333333333 or 16.6666666666
(My SQL code is listed in the snippet box below)
-----------------------------------
Instead, I need to be able to do two things. (1) display two decimal numbers past the decimal,
33.33 or 16.66 without rounding. And secondly to be able to round the number beyond the decimal up to the next highest value, or to round it down to the next lowest number. Like
33.00 and 17.00
DECLARE @EmployeeCount int
DECLARE @inputID int
SET @inputID=2
SELECT @EmployeeCount=COUNT(DISTINCT(intUserID)) from  tableSendResponse as theTotal
 where SendID IS NOT NULL AND (SendID=@inputID)
PRINT @EmployeeCount
 
SELECT 
     convert(varchar(30), DATEADD(hh,DATEPART(hh, [ResponseDateTime])), 100) dates,
     ((CAST(COUNT(intUserID) AS FLOAT)/@EmployeeCount)*100) theCount
FROM
      tableSendResponse where ResponseDateTime IS NOT NULL
GROUP BY
  convert(varchar(30), DATEADD(hh, DATEPART(hh, [ResponseDateTime]),
   CAST(FLOOR(CAST([ResponseDateTime] AS FLOAT)) AS DATETIME)),100)

Open in new window

LVL 2
brgdotnetcontractorAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
k_murli_krishnaConnect With a Mentor Commented:
Make use of the following:
STR ( float_expression [ , length [ , decimal ] ] )
float_expression
Is an expression of approximate numeric (float) data type with a decimal point.

length
Is the total length. This includes decimal point, sign, digits, and spaces. The default is 10.

decimal
Is the number of places to the right of the decimal point. decimal must be less than or equal to 16. If decimal is more than 16 then the result is truncated to sixteen places to the right of the decimal point.

SELECT STR(33.3333333333, 5, 2);
33.33
SELECT STR(16.6666666666, 5, 2);
16.66
In above, 5 indicates total length of value to display. If you mention > 5, then padded with left space that extra length of characters specified. 2 means to truncate till 2 places after decimal/decimal places.

SELECT STR(FLOOR (33.3333333333), 2, 0)
33
SELECT STR(CEILING(16.6666666666),2,0)
17

0
 
udaya kumar laligondlaConnect With a Mentor Technical LeadCommented:
use
select ((CAST(COUNT(intUserID) AS FLOAT)/@EmployeeCount)*100 as numeric(8,2)) theCount
instead of
((CAST(COUNT(intUserID) AS FLOAT)/@EmployeeCount)*100) theCount
0
 
Scott PletcherConnect With a Mentor Senior DBACommented:
Use ROUND followed by CAST.

To truncate, specify a non-zero value for the third param (second param = # dec places); for example:

SELECT CAST(ROUND(16.6666666666, 2, 1) AS DECIMAL(9, 2))

To round to a whole number, specify 0 as the # of dec places:

SELECT CAST(ROUND(16.6666666666, 0) AS DECIMAL(9, 2))
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.