sqlの重要な数字に丸めます
-
20-09-2019 - |
質問
SQLの重要な数字に数字を締めくくることができます。そう:
123.456 rounded to 2sf would give 120
0.00123 rounded to 2sf would give 0.0012
私は、かなりの数字ではなく、小数点以下の場所に丸くなるラウンド()関数を知っています。
解決
select round(@number,@sf-1- floor(log10(abs(@number))))
トリックをする必要があります!
2つの例で正常にテストされました。
編集: @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にBrannから最も人気のある答えを適応させました。
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
/ *コメントを入れるには長すぎると感じました */
round(num、sf -1 -floor(log10(abs(num))))
- 作業を行う部分 - 通常のように数のラウンド関数を使用しますが、丸みを帯びている長さは計算されます
- ABSはポジティブを保証します
- log10は、数の0より大きい数桁を取得します
- 床は、結果の数よりも小さくなる最大の整数を取得します
- だから、常に丸めて整数を与えます
- SF -1-フロア(...)は負の数を与えます
丸(num、-ve num)が小数点の左側に丸くなるために機能します
1回のラウンド(123.456、-1)およびラウンド(0.00123,4)の場合、要求された回答を返します((120、0.0012)
丸くする前に100で分割してから、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