I have a report field that can contain different types of data, therefore I need to do my rounding and formatting using functions.
In one case, I have a decimal(9,2) value storing hours开发者_运维技巧 that I need to display as minutes with zero decimal places.
Round(foo*60, 0)
, where foo = .01
(which is 0.6 when multiplied by 60), is outputting 1 like I would expect.
Round(foo*60, 0)
, where foo = .21
(which is 12.6 when multiplied by 60), is outputting 12 instead of 13.
Why? How can I get it to consistently use standard 4/5 rounding?
Take a look at this other stackoverflow question:
SQL Server Reporting Services Round() function
You are seeing Round to Even logic rather than mid point rounding.
This Wikipedia article has all the details about rounding: Wikipedia Rounding Article
I can't reproduce your results. Perhaps you are hiding some other relevant details.
Declare @foo Decimal(9,2)
Set @foo = 0.21
Select Round(@Foo * 60, 0), @foo * 60
The output from the above code is 13.00 and 12.60 respectively.
Is it possible that the Foo column is a float, or that there is more precision in the foo column that you expect? For example, the following code produces 12 (instead of 13).
Declare @foo float
Set @foo = 0.208
Select Round(@Foo * 60, 0), @foo * 60, Round(@foo, 2)
精彩评论