लेखन 0.001
.net डेटा एडॉप्टर के माध्यम से पोस्ट करने के लिए (9.1 से 9.3) एक अजीब परिणाम है 0.00
मान (pgAdmin में) जो शून्य के रूप में प्रकट होता है, लेकिन नहीं है।
वास्तव में, जैसे सरल प्रश्न SELECT 1/(SELECT "weird_field" ...) FROM ...
correcly देता है 1000
.
अधिक जटिल प्रश्नों (विभाजन के साथ) में आश्चर्यजनक रूप से परिणाम होता है division by zero
त्रुटि।
इसके अलावा, Navicat द्वारा ऑर्डर करना सही ढंग से 0.0011 और 0.0009 के बीच के मूल्य को दर्शाता है
हम डेटाबेस से कनेक्ट करने के लिए Devart लाइब्रेरी का उपयोग करते हैं, लेकिन अपराधी को डेटा एडाप्टर लगता है (या कम से कम इन दोनों का कॉम्बो) क्योंकि डेवार्ट ड्राइवरों के माध्यम से एक साधारण सीधी क्वेरी, अभी भी एक ही परिणाम नहीं देती है।
क्या चल रहा है पर कोई विचार?
--
संपादित करें:
DB पर टाइप है numeric
, कार्यक्रम में के रूप में प्रतिनिधित्व किया है double
decimal
.
pSQL प्रिंट यह:
--
0.00
(1 पंक्ति)
--
संपादित करें 2:
log_statement = "all"
एक अजीब परिणाम देता है:
UPDATE "TABLE" SET ... "WEIRD_FIELD"=$8 ... WHERE ...
DETAIL: parameters: $1 = "7", $2 = "7", $3 = "18", $4 = "18", $5 = "V03", $6 = "Hz",
$7 = "Hz", $8 = "0.00", $9 = "0", $10 = "2", $11 = "0"
अजीब क्षेत्र के लिए पैरामीटर शून्य (0.00) के रूप में मुद्रित होता है, लेकिन स्पष्ट रूप से यह नहीं है ...
ध्यान दें कि DataGridView में मान DataAdapter द्वारा पॉप्युलेट किया गया है सही दिखाता है 0.001
.
--
EDIT 3 (मौरिस):
Devart एडॉप्टर के साथ समस्या प्रतीत होती हैतय किया हुआ। नवीनतम संस्करण का उपयोग करते हुए, मैं अब समस्या नहीं देखता। मुझे लगता है कि यह इस विशिष्ट फिक्स से संबंधित है: 7.3.293 20-Nov-14: PgSqlType.Numeric के माध्यम से प्रोटोकॉल 3 के साथ काम करने पर सटीक नुकसान के साथ बग तय हो गया है मैंने नवीनतम डेवार्ट असेंबली का उपयोग करके अपने सॉफ़्टवेयर को अपग्रेड किया और अब सब कुछ उम्मीद के मुताबिक काम करता है।
उत्तर:
जवाब के लिए 2 № 1हमें पता चला कि समस्या PgSql के प्रतिनिधित्व करने के तरीके में है numeric
s (दशमलव) अनिर्दिष्ट परिशुद्धता और पैमाने के साथ.
DB में मान सही प्रतीत होता है (0.001
) लेकिन कुछ ऑपरेशनों में इसे काट दिया जाता है:
"weird_field" + 0.001
---------------------
0.002
परंतु
"weird_field" * 2
--------------------
0.00
तथा
"weird_field" * 5
--------------------
0.01
यह भी बताता है कि कुछ प्रश्न क्यों देता है a division by zero
त्रुटि।
समाधान सटीक और पैमाने निर्दिष्ट करने के लिए है, उदाहरण के लिए हमने चुना numeric(38,28)
(हम Oracle में दशमलव के लिए भी उपयोग करते हैं) और सभी ठीक काम करता है।
--
PgSql प्रलेखन को देखते हुए, हमने इस व्यवहार के बारे में कुछ नहीं पाया, इसलिए हम मानते हैं कि यह एक बग है:
निर्दिष्ट करना:
NUMERIC
बिना किसी सटीक या पैमाने के एक स्तंभ बनाता हैजिसमें किसी भी सटीक और पैमाने के संख्यात्मक मानों को संग्रहीत किया जा सकता है, परिशुद्धता पर कार्यान्वयन सीमा तक। इस तरह का एक कॉलम किसी विशेष पैमाने पर इनपुट मानों को जमा नहीं करेगा, जबकि एक घोषित पैमाने के साथ संख्यात्मक कॉलम उस पैमाने पर इनपुट मानों को जोड़ देगा।
अजीब बात यह भी है कि 0.000001
(एट सिमिलिया) नहीं, जबकि छंटनी हो 0.001
कर देता है।