What surprises do you think would come from a

round(real, integer) returns real

function? 

Just asking the question, I guess I can see the answer, since though round() is 
usually used to reduce precision, it’s also possible to use it to increase it 
arbitrarily… bah.

It does bug me a fair bit, so perhaps I’ve finally found my bite-size pgsql 
contribution project :)

P.

-- 
Paul Ramsey
http://cleverelephant.ca
http://postgis.net

On January 10, 2014 at 12:37:04 PM, Tom Lane (t...@sss.pgh.pa.us) wrote:

Paul Ramsey <pram...@cleverelephant.ca> writes:  
> History question:  
> Why does select round(3,3) work,   
>          select round(3.0,3) work,   
> but      select round(3.0::real,1) not work?  

The 2-argument round() function actually takes (numeric, integer).  

There's an implicit cast from int to numeric, but not an implicit  
cast from real to numeric (for that pair of types, the direction  
of implicit casting is from numeric to real).  

The choices we made for implicit casting behavior among the numeric  
datatypes are based on what it says in the SQL standard about exact and  
approximate numeric types. There's probably room for argument about  
the details, but it seems unlikely that we'd risk the breakage that'd  
ensue from rejiggering the casting rules at this stage.  

If this annoys you enough, a more realistic solution would be to add  
an additional round(float8, int) function. I think it'd have to return  
numeric though if you don't want surprises.  

regards, tom lane  

Reply via email to