On Thu, May 26, 2005 at 08:56:34AM -0400, Paul Tillotson wrote:
> Tom Lane wrote:
> 
> >Paul Tillotson <[EMAIL PROTECTED]> writes:

> In other words, no arbitrary number of extra decimal places when calling 
> div_var() will be always sufficient to prevent rounding up at some other 
> decimal place.

No, an arbitrary number won't do.  I found I could make it work by
adding as much extra decimals as digits in the divisor.  At least it
worked for these test cases I made up.  (Attached)

> >I cannot believe that that won't create problems at least as bad as it
> >solves.  Have you even tried the regression tests on this?

> <sheepish grin>  No.  Can you tell me how to do that?

make installcheck in src/test/regress

-- 
Alvaro Herrera (<alvherre[a]surnet.cl>)
"Cómo ponemos nuestros dedos en la arcilla del otro. Eso es la amistad; jugar
al alfarero y ver qué formas se pueden sacar del otro" (C. Halloway en
La Feria de las Tinieblas, R. Bradbury)
drop table modtest;
create table modtest (name text, arg1 numeric, arg2 numeric);
copy modtest from stdin;
uno     4385200147210375820     123
dos     12345678901234567934    123
tres    539379618106876228181   122
cuatro  539379618106876228319   123
cinco   66343693027145776082375 123
seis    8160274242338930458142210       123
siete   1003713731807688446351500562    123
ocho    123456789012345678901234567895  123
nueve   1234567890123456789012345678901234567856        123
diez    12345678901234567890123456789012345678901234567817      123
once    123456789012345678901234567890123456789012345678901234567901    123
doce    1234567890123456789012345678901234567890123456789012345678901234567859  
12
trece   1234567890123456789012345678901234567890123456789012345678901234567862  
123
catorce 1234567890123456789012345678901234567890123456789012345678901234566713  
1234
quince  
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567321
    1234
dieciseis       
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234558889
    12345
\.

select name, arg1 % arg2 from modtest;
\echo 0
select name, arg2, arg1 % arg2::numeric(10,0), log(arg2)::int from modtest;
\echo 1
select name, arg2, arg1 % arg2::numeric(10,1), log(arg2)::int from modtest;
\echo 2
select name, arg2, arg1 % arg2::numeric(10,2), log(arg2)::int from modtest;
\echo 3
select name, arg2, arg1 % arg2::numeric(10,3), log(arg2)::int from modtest;
\echo 4
select name, arg2, arg1 % arg2::numeric(10,4), log(arg2)::int from modtest;
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq

Reply via email to