繁体   English   中英

在SQL中舍入到n个重要数字

Round to n Significant Figures in SQL

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我希望能够在SQL中将数字舍入为n个有效数字。 所以:

123.456 rounded to 2sf would give 120
0.00123 rounded to 2sf would give 0.0012

我知道ROUND()函数,它舍入到n个小数位而不是有效数字。

4 个回复

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

/ *感觉太长,无法发表评论* /

ROUND(num,sf - 1 - FLOOR(LOG10(ABS(num))))

  • 完成工作的部分 - 正常使用数字上的ROUND函数,但计算要舍入的长度
  • ABS确保积极
  • LOG10获取数字中大于0的位数
  • FLOOR获得小于结果数的最大整数
  • 所以总是向下舍入并给出一个整数
  • sf - 1 - FLOOR(...)给出一个负数
  • 因为ROUND(num,-ve num)向小数点左侧舍入而起作用

  • 仅一次性,ROUND(123.456,-1)和ROUND(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
1 python 中的有效数字舍入

我想像这样四舍五入 42949672 -&gt; 42949700、2147483647 -&gt; 2147480000、4252017622 -&gt; 4252020000 等。 我尝试使用以下,但仅适用于第一个。 如何制作更通用的? 谢谢 ...

2 舍入数字到两个重要数字

我相信对于你们在Swift中经验丰富的人来说这是一个简单的问题,但是,我刚开始学习如何编程并且不知道从哪里开始。 我想要做的是将数字舍入到最接近的整数或第三个数字。 这就是我的意思: 我知道swift有一个.rounded()函数,我已经设法使用它来舍入最近的第10个,第100个等等 ...

4 如何在SQL中不舍入数字

我有这样的查询: 该比率应为618/688 = 0.90,但我的结果是1.00 我是SQL新手,需要帮助。 谢谢。 ...

2013-02-21 13:53:55 3 1530   sql
5 舍入为任意长度的舍入为n位数字

我已经阅读了大多数与“舍入到n位数字”有关的SO问题。 我认为这个问题是分开的,因为它与任意长度的浮点数的舍入关系更大。 上面的数字是我正在使用的数字类型的示例。 我知道如何在C ++中四舍五入,这非常简单。 但是,我不明白如何将任意长的数字四舍五入为n位数字。 例如,我 ...

9 SSRS报表中的SSRS或SQL数字舍入/截断

我正在使用SSRS编写报告,但遇到了一个非常奇怪的问题。 我有一些舍入的数字,我不想舍入。 以下是正在发挥作用的表达式。 我已格式化文本框以显示4个小数,默认值,金额,自定义和其他没有运气的内容。 数字以正确的小数开头。 所以下面是我正在使用的表达式。 为什么使用OR运算 ...

10 是否可以在保持小数形式的同时在 SQL 中舍入小于 1 的数字

尽管专门寻找它,但我没有找到解决此问题的方法。 下面的查询是我试图让最后一个小数位正确显示。 从这里我正在寻找如何正确四舍五入到 0.33 或者如果结果是 0.339 到四舍五入到 0.34 我发现它只会向下舍入为 0,因为它不是整数。 有人可以指出我正确的方向,或者如果没有好的方法让我知 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM