SQL의 둥근 수치
-
20-09-2019 - |
문제
SQL에서 숫자를 N 중요한 수치로 반올림하고 싶습니다. 그래서:
123.456 rounded to 2sf would give 120
0.00123 rounded to 2sf would give 0.0012
나는 중요한 수치가 아닌 10 진수로 반올림하는 Round () 함수를 알고 있습니다.
해결책
select round(@number,@sf-1- floor(log10(abs(@number))))
트릭을해야합니다!
두 예제에서 성공적으로 테스트했습니다.
편집 : @number = 0 에서이 함수를 호출하는 것은 작동하지 않습니다. 이 코드를 사용하기 전에 테스트를 추가해야합니다.
create function sfround(@number float, @sf int) returns float as
begin
declare @r float
select @r = case when @number = 0 then 0 else round(@number ,@sf -1-floor(log10(abs(@number )))) end
return (@r)
end
다른 팁
Brann이 저처럼 보이는 사람들을 위해 MySQL에 가장 인기있는 답변을 조정했습니다.
CREATE FUNCTION `sfround`(num FLOAT, sf INT) # creates the function
RETURNS float # defines output type
DETERMINISTIC # given input, will return same output
BEGIN
DECLARE r FLOAT; # make a variable called r, defined as a float
IF( num IS NULL OR num = 0) THEN # ensure the number exists, and isn't 0
SET r = num; # if it is; leave alone
ELSE
SET r = ROUND(num, sf - 1 - FLOOR(LOG10(ABS(num))));
/* see below*/
END IF;
RETURN (r);
END
/ * 댓글을 달기에는 너무 오래 느껴졌다 */
라운드 (num, sf -1- 바닥 (log10 (abs (num))))
- 작업을 수행하는 부분 - 숫자에 라운드 기능을 사용하지만 반올림하는 길이는 계산됩니다.
- ABS는 긍정적 인 것을 보장합니다
- log10은 숫자에서 0보다 큰 숫자 수를 얻습니다.
- 바닥이 결과 숫자보다 가장 큰 정수가 작습니다.
- 그래서 항상 둥글게하고 정수를 제공합니다
- sf -1- 바닥 (...)은 음수를 제공합니다.
소수점의 왼쪽으로 둥근 (num, -e num) 라운드로 작동합니다.
한 번만, 라운드 (123.456, -1) 및 라운드 (0.00123,4) 요청 된 답변을 반환합니다 ((120, 0.0012)
반올림하기 전에 100으로 나눌 수 있습니다.
나는 그것을 관리했다고 생각합니다.
CREATE FUNCTION RoundSigFig(@Number float, @Figures int)
RETURNS float
AS
BEGIN
DECLARE @Answer float;
SET @Answer = (
SELECT
CASE WHEN intPower IS NULL THEN 0
ELSE FLOOR(fltNumber * POWER(CAST(10 AS float), intPower) + 0.5)
* POWER(CAST(10 AS float), -intPower)
END AS ans
FROM (
SELECT
@Number AS fltNumber,
CASE WHEN @Number > 0
THEN -((CEILING(LOG10(@Number)) - @Figures))
WHEN @Number < 0
THEN -((FLOOR(LOG10(@Number)) - @Figures))
ELSE NULL END AS intPower
) t
);
RETURN @Answer;
END
제휴하지 않습니다 StackOverflow