SQL Server sẽ luôn đưa ra một kết quả số nguyên khi bạn chia hai số nguyên.
Bạn có thể thêm dấu ".0" vào cuối các giá trị được mã hóa cứng thực tế hoặc nhân với "1.0" để chuyển đổi giá trị trường. Nếu bạn muốn làm tròn, thì cách tốt nhất tôi biết là thêm 0,5, sau đó gọi hàm ROUND bình thường. Điều đó hoạt động vì ROUND_DOWN (số + .5) luôn giống như ROUND_UP (số).
Bạn cũng có thể truyền một trường vào phao theo cách thủ công, như những trường khác đã chỉ ra.
Nhưng lưu ý rằng
round(1.0/2.0,0)
sẽ trả về một floating point kết quả, trong khi
round(cast(1 as float)/cast(2 as float),0)
sẽ đưa ra một số nguyên kết quả. Vì vậy, sử dụng một trong những công trình tốt nhất cho bạn.
Tất cả những được minh họa trong ví dụ dưới đây:
SELECT
ROUND(5/2,0) AS INTEGER_EXAMPLE
,ROUND((5.0/2.0),0) AS FLOATING_POINT_EXAMPLE
,ROUND(CAST(5 AS FLOAT)/CAST(2 AS FLOAT),0) AS CASTING_EXAMPLE
,ROUND((5 * 1.0)/(2 * 1.0),0) AS CONVERTED_TO_FP_EXAMPLE
,ROUND(((1 * 1.0)/(4 * 1.0)) + (1.0/2.0),0) AS ROUNDED_UP_EXAMPLE
Đây là một chức năng mà sẽ làm tròn-up cho bạn, cùng với một SELECT để hiển thị cho bạn những kết quả nó mang lại.
create function roundup(@n float) returns float
as
begin
--Special case: if they give a whole number, just return it
if @n = ROUND(@n,0)
return @n;
--otherwise, add half and then round it down
declare @result float = @n;
declare @half float = (1.0/2.0);
set @result = round(@n + @half,0);
return @result;
end
select
dbo.roundup(0.0) as example_0
,dbo.roundup(0.3) as example_pt_three
,dbo.roundup(0.5) as example_pt_five
,dbo.roundup(0.9) as example_pt_nine
Cảm ơn! đã làm việc tuyệt vời – Martin