Có thể dễ dàng làm tròn một hình lên tới 100 gần nhất (hoặc 1000, 500, 200, v.v.) trong SQL Server không?Vòng * UP * đến 100 gần nhất trong SQL Server
Vì vậy:
720 -> 800
790 -> 800
1401 -> 1500
Có thể dễ dàng làm tròn một hình lên tới 100 gần nhất (hoặc 1000, 500, 200, v.v.) trong SQL Server không?Vòng * UP * đến 100 gần nhất trong SQL Server
Vì vậy:
720 -> 800
790 -> 800
1401 -> 1500
Sau đây sẽ hoạt động. Sau khi đọc câu hỏi của bạn, tôi không chắc chắn chính xác những gì bạn muốn 100 trở lại. Đối với điều này 100 lợi nhuận 100.
select floor((X + 99)/100) * 100;
này cho kết quả như sau:
0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
Một lựa chọn sẽ được sử dụng CEILING() chức năng như thế này:
SELECT CEILING(@value/100.0) * 100
Bạn có thể cần phải chuyển đổi giá trị của bạn sang thập phân đầu tiên tùy thuộc vào loại của nó.
Không có chức năng gốc nào sẽ thực hiện việc này, nhưng có một số thủ thuật toán học đơn giản sẽ có. Ví dụ:
DECLARE @Foo int
SET @Foo = 720
print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
Điều này không phải lúc nào cũng tròn * UP *, như được chỉ định trong câu hỏi. Bạn ví dụ với 720 là đầu vào nên trả lại 800, nhưng thay vào đó nó trả về 700. – Gyromite
Bạn có thể sử dụng mã này, giả sử amount
của bạn là int. Nếu không, bạn sẽ cần phải đúc, vì vậy bạn sẽ có được phân chia số nguyên.
If amount % 100 != 0 Then
roundedAmount = ((amount/100) * 100) + 100
Else
roundedAmount = amount
Bạn có thể muốn gói gói này vào một số user defined function.
Sử dụng chức năng TRẦN để làm tròn một con số lên
DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
cho làm tròn lên đến hàng nghìn gần nhất, xin vui lòng hãy thử các cách sau: -
select round(YourValue, -3)
Chúc mừng !!!!!
Điều này làm tròn xuống, không lên. Thử nó. chọn vòng (1005, -3) --result: 1000 – Sameer
Giải pháp chung - Sử dụng MOD để tìm vị trí thứ 100 cuối cùng và sau đó thêm 100 vào kết quả.
select (720 - MOD(720,100)) + 100 from dual;
Nếu bạn cần vị trí thứ 80 tiếp theo, chỉ cần thay thế bất kỳ "100" bằng "80".
Có vấn đề với công thức này khi giá trị đầu vào đã là bội số của 100. 'select (800 - (800% 100)) + 100;' bạn 900 thay vì 800. – Gyromite
Hãy thử điều này:
chọn tròn (@value, -2);
Điều này không phải lúc nào cũng tròn * UP *, như được chỉ định trong câu hỏi. Ví dụ 'chọn vòng (129.0, -2);' trả về 100 thay vì 200. – Gyromite
Nó rất đơn giản để làm tròn một số đến bất kỳ bội số của gần 10 bằng cách sử dụng chỉ đơn giản là ROUND
chức năng cho ví dụ:
SELECT ROUND(number/1000,2)*1000
này sẽ cung cấp cho bạn giá trị phần nghìn gần nhất.
Ngoài Gray's câu trả lời, Tôi muốn sử dụng chức năng inline sau:
CREATE FUNCTION dbo.udf_RoundNearest
(
@Number bigint,
@RoundNearest bigint,
@Direction int
)
RETURNS TABLE AS
RETURN
SELECT CASE WHEN @RoundNearest>[email protected] THEN @Number
ELSE
(
(@Number + CASE
WHEN @Direction = 0 --Round Down
THEN 0
ELSE CASE WHEN @Number % @RoundNearest = 0 THEN 0 ELSE @RoundNearest END
END)/@RoundNearest) * @RoundNearest
END Number
Parameter Định nghĩa:
sử dụng chức năng:
SELECT * FROM dbo.udf_RoundNearest (1965,100,1) --> 2000
SELECT * FROM dbo.udf_RoundNearest (1359,100,0) --> 1300
SELECT * FROM dbo.udf_RoundNearest (1999,10,0) --1990
SELECT * FROM dbo.udf_RoundNearest (80,100,0) --> 80 (if the @number parameter is less or equal the @RoundNearest parameter the result will be the @number itself
nó cũng có thể được sử dụng như áp dụng nó so với một bảng như:
;with tmp (Value) as
(select 1236 union all select 6584 union all select 9999)
select t.*, fn.Number
from tmp t
cross apply dbo.udf_RoundNearest (Value,100,0) fn
/*Result Set
Value Number
1236 1200
6584 6500
9999 9900*/
Tôi cần một cái gì đó nếu C# để làm điều tương tự, và công thức trên hoạt động tốt. Vấn đề nhỏ duy nhất là không hoạt động nếu X là âm. Cách tôi cố định nó (không hoàn toàn chắc chắn về cú pháp SQL, nhưng nên dễ dàng tìm ra) là đảm bảo X luôn luôn dương (Abs (X)) và sau đó nhân với -100. –
Xin lỗi để nói, nhưng câu trả lời này dường như chỉ hoạt động với các giá trị số nguyên. X = 100,25 vẫn cung cấp cho 100 thay vì làm tròn lên đến 200. @ Krock của trần trả lời hoạt động tốt hơn cho phao và số thập phân – bmadtiger