real
एक हानिपूर्ण, अचूक फ़्लोटिंग-पॉइंट प्रकार है। यह भंडारण के लिए केवल 4 बाइट्स का उपयोग करता है और प्रस्तुत संख्यात्मक अक्षर को ठीक से शुरू करने के लिए संग्रहीत नहीं कर सकता है। इसके अलावा, कार्यान्वयन विवरण आपके प्लेटफॉर्म पर निर्भर करता है। अध्याय "फ़्लोटिंग-पॉइंट प्रकार" पर विचार करें मैनुअल।
round()
में कुछ भी गलत नहीं है या cast()
. सटीक परिणामों के लिए, आपको numeric
का उपयोग करना होगा शुरू करने के लिए।
फ़ंक्शन ऑडिट
CREATE OR REPLACE FUNCTION test3()
RETURNS void AS
$func$
DECLARE
r record;
BEGIN
FOR r IN
SELECT abs_km AS km
,cast(abs_km AS numeric) AS km_cast
,round(abs_km::numeric, 2) AS km_round
FROM gps_entry
LOOP
RAISE NOTICE 'km: % , km_cast: % , km_round: %'
, r.km, r.km_cast, r.km_round;
INSERT INTO test (km, casting, rounding)
VALUES (r.km, r.km_cast, r.km_round);
END LOOP;
END
$func$ LANGUAGE plpgsql;
- भाषा का नाम उद्धृत न करें
plpgsql
. यह एक पहचानकर्ता है। -
बाद . को 2 भिन्नात्मक अंकों में गोल करने का कोई मतलब नहीं है
numeric(16,2)
. पर कास्टिंग , जो पहले से ही जबरन चक्कर लगाते हैं। या तो - या ..round(abs_km:: numeric(16,2), 2) as roundround(abs_km::numeric, 2) as round abs_km::numeric(16,2) as round
अंत में, आपको वर्तमान संस्करण में अपग्रेड करने की आवश्यकता है। पोस्टग्रेज 8.3 ईओएल तक पहुंच गया है और यह समर्थित नहीं है।