2011-11-11 22 views
7

में फ़्लोटिंग पॉइंट प्रकारों का पूर्ण सटीक आउटपुट मेरे पास 1555.4899999999998float कॉलम में डिफ़ॉल्ट परिशुद्धता (53) के साथ संग्रहीत मूल्य है। जब मैं एक साधारण select करता हूं, तो एसएसएमएस सभी उपलब्ध सटीकता के साथ इसे प्रिंट करने के बजाय आउटपुट को गोल करता है। इसके कारण हाल ही में मेरे लिए कुछ गठजोड़ हुए हैं क्योंकि वास्तविक मुद्रित मूल्य से मेल खाने के लिए मूल्य मुद्रित float शाब्दिक के रूप में काम नहीं करता है।SQL सर्वर प्रबंधन स्टूडियो

उदाहरण के लिए, (ध्यान दें कि इन नंबरों के दोनों डिफ़ॉल्ट float में एक सटीक प्रतिनिधित्व)

declare @f1 float 
declare @f2 float 
set @f1 = 1555.49 
set @f2 = 1555.4899999999998 
select @f1, @f2 
select STR(@f1,30,15), STR(@f2,30,15) 

आउटपुट:

1555.49 1555.49 
1555.490000000000000 1555.489999999999800 

क्वेरी विश्लेषक में, कि पहले select आउटपुट:

1555.49 1555.4899999999998 

यही वह व्यवहार है जिसे मैं चाहता हूं प्रबंधन स्टूडियो से मिलता है। एसएसएमएस को इसके परिणाम प्रदर्शन में गोल करने से रोकने का कोई तरीका है?

उत्तर

7

सं

एसक्यूएल सर्वर प्रबंधन स्टूडियो प्रदर्शन प्रयोजनों के लिए चल बिन्दु मान दौर; Connect suggestion to change this behavior है, लेकिन यह "डिज़ाइन द्वारा" बंद है।

हालांकि, SQLCMD, osql और क्वेरी विश्लेषक नहीं करते हैं।

SQLCMD -E -S server -Q"SELECT CONVERT(FLOAT, 1555.4899999999998)" 
0

क्या कोई कारण है कि आप दशमलव प्रकार से फ्लोट प्रकार का उपयोग करेंगे? फ़्लोट्स को भिन्नता के रूप में संग्रहित किया जाता है, जिससे उन पर संचालन करते समय उन्हें अक्सर थोड़ा सहज होना पड़ता है। यह ठीक है जब आपके पास एक ग्राफिक्स एप्लिकेशन होता है जहां असुरक्षा एक पिक्सेल के आकार की तुलना में बहुत कम महत्वपूर्ण होती है, लेकिन यह एक लेखांकन एप्लिकेशन की तरह एक बड़ी समस्या है जहां आप पैसे से निपट रहे हैं।

मैं यह कहने का प्रयास करता हूं कि एक फ्लोट का उपयोग करने से गति या आकार में किसी भी लाभ से किसी भी लाभ के मुकाबले अधिकांश अनुप्रयोगों के लिए दशमलव की सटीकता अधिक महत्वपूर्ण होती है।

+1

डेटाबेस स्कीमा मेरे नियंत्रण से बाहर है, दुर्भाग्य से। मैं समझौते में 100% हूं कि 'फ्लोट' इस एप्लिकेशन के लिए एक खराब विकल्प है, लेकिन यदि यह सही प्रकार था तो मैं अभी भी प्रबंधन स्टूडियो में एक और सटीक प्रतिनिधित्व की उम्मीद करता हूं। – Simon

-2

मेरी मूल पोस्ट में संपादित करें। जब मैं इस पृष्ठ पर भाग गया तो मैं थोड़ा अलग समस्या हल करने की कोशिश कर रहा था। मैं बस एक "नियमित" संख्या वापस करने के लिए एक फ्लोट प्रकार चाहता था, वैज्ञानिक संकेत नहीं।

मूल रूप से दो रूपांतरणों को सुझाया गया। इसके अंत में इसके साथ घायल हो जाओ। जैसा कि आप चाहें उतने दशमलव स्थानों को दिखाने के लिए नीचे दिया गया 7 बदला जा सकता है। बदलें और trims अग्रणी और पिछला शून्य से छुटकारा पाएं।

की जगह (RTRIM (LTRIM (REPLACE (एसटीआर (एक्स, 20, 7), '0', ''))), ',' 0 ')

+2

लक्ष्य VARCHAR में परिवर्तित नहीं करना है। मेरे उदाहरण में एसटीआर() कॉल पहले से ही ऐसा करते हैं। मैं अपनी क्वेरी में रूपांतरण जोड़ने के बिना एसएसएमएस के डिफ़ॉल्ट व्यवहार को बदलने की उम्मीद कर रहा था। वैसे, दशमलव बिंदु के बाद 5 स्थान मेरे उदाहरण में मूल्यों को असंबद्ध करने के लिए पर्याप्त नहीं हैं, या तो। इसके लिए आपको कम से कम DECIMAL (28,13) की आवश्यकता होगी। – Simon

+0

मैंने अपना जवाब संपादित किया। अभी भी एसएसएमएस के साथ मदद नहीं करता है। मैं चाहता था कि स्ट्रिंग प्रतिनिधित्व बस देता है। शायद एक उपयोगी कामकाज। – user600410

संबंधित मुद्दे