Demitri Muna <postgre...@demitri.com> writes: > I’m writing a C extension for PostgreSQL. One possible input datatype for my > function is a numeric array, e.g. ARRAY[[1.5,2.5],[3.5,4.5]]. I can use > “DatumGetNumeric” to extract a “Numeric” data type from the data, but at some > point I need to convert this to a number (e.g. double) so that I can do mathy > things with it. How does one convert a “Numeric” to, say, a double?
If you want to work with doubles, why don't you declare the function as taking doubles? > I have a workaround in that I can pass this to my function: > ARRAY[[1.5,2.5],[3.5,4.5]]::float8[] > but I’d rather have the code do that instead of bothering the user to > remember that. Well, the implicit coercions work in your favor in this particular case. You can just do, eg, regression=# create function foo(float8[]) returns float8 as regression-# 'select $1[1]' language sql; CREATE FUNCTION regression=# select foo(array[1.1,1.2]); foo ----- 1.1 (1 row) or to emphasize that it is doing a conversion: regression=# select foo(array[1.1,1.2]::numeric[]); foo ----- 1.1 (1 row) regards, tom lane