문제

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top