【发布时间】:2014-03-01 20:25:01
【问题描述】:
我有带有示例值的 real 列类型的表:
123456,12
0,12345678
以及存储过程中的代码:
CREATE OR REPLACE FUNCTION test3()
RETURNS integer AS
$BODY$
DECLARE
rec RECORD;
BEGIN
FOR rec IN
SELECT
gme.abs_km as km,
CAST(gme.abs_km as numeric) as cast,
round(gme.abs_km:: numeric(16,2), 2) as round
FROM gps_entry gme
LOOP
RAISE NOTICE 'Km: % , cast: % , round: %', rec.km, rec.cast, rec.round;
INSERT INTO test (km, casting, rounding) VALUES (rec.km, rec.cast, rec.round);
END LOOP;
RETURN 1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
这是输出:
2014-02-05 12:49:53 CET 通知:公里:0.12345678,投:0.123457,回合:0.12 2014-02-05 12:49:53 CET 通知:公里:123456.12,投:123456,回合:123456.00包含NUMERIC(19,2) 列的数据库表:
km casting rounding
0.12 0.12 0.12
123456.00 123456.00 123456.00
为什么cast 和round 函数不适用于值123456.12?
【问题讨论】:
-
要格式化数字以显示给用户,请使用
to_char。 -
实际上我想将这些值插入到带有数字(19,2)列的数据库表中,我已经更新了相关代码
-
问题似乎与超过 6 位的数字有关,因为这些数字的转换和舍入工作:1.23 1234.12, 123.456
标签: postgresql stored-procedures types plpgsql postgresql-8.3