Round to n Significant Figures in SQL

Paul picture Paul · Dec 17, 2009 · Viewed 20k times · Source

I would like to be able to round a number to n significant figures in SQL. So:

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

I am aware of the ROUND() function, which rounds to n decimal places rather than significant figures.

Answer

Brann picture Brann · Dec 17, 2009

select round(@number,@sf-1- floor(log10(abs(@number)))) should do the trick !

Successfully tested on your two examples.

Edit : Calling this function on @number=0 won't work. You should add a test for this before using this code.

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