इस कोड को मैं उदाहरण में उपयोग कर रहा हूं:
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2;
PRINT @weight
यहाँ परिणाम है:
47
638
0
मैं जानना चाहूंगा कि इसकी 0बजाय वापसी क्यों हो रही है0,073667712
जवाबों:
जब आप किसी विभाजन में केवल पूर्णांक का उपयोग करते हैं, तो आपको पूर्णांक विभाजन मिलेगा। जब आप (कम से कम एक) डबल या फ्लोट का उपयोग करते हैं, तो आपको फ्लोटिंग पॉइंट डिवीजन (और वह उत्तर जो आप प्राप्त करना चाहते हैं) मिलेगा।
तो तुम कर सकते हो
केवल पूर्णांक विभाजन के परिणाम को डबल करने के लिए मत डालें: विभाजन पहले से ही पूर्णांक विभाजन के रूप में किया गया था, इसलिए दशमलव के पीछे की संख्या पहले से ही खो गई है।
क्योंकि यह पूर्णांक है। आपको उन्हें फ़्लोटिंग पॉइंट नंबर या दशमलव के रूप में घोषित करने की आवश्यकता है, या गणना में इस तरह कास्ट करना होगा।
बस 1.0 से विभाजन के निचले भाग को मसल दें (या जितने चाहें उतने दशमलव स्थान)
PRINT @set1
PRINT @set2
SET @weight= @set1 / @set2 *1.00000;
PRINT @weight
यदि आप इसे फ्लोट या किसी भी दशमलव प्रारूप के रूप में घोषित करते हैं, तो यह प्रदर्शित होगा
0
केवल
जैसे:
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
आउटपुट: 0
यदि आप आउटपुट को चाहते हैं
.०७,३६,६७,७१२
उदाहरण के लिए
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
SQL सर्वर में दो पूर्णांक के प्रत्यक्ष विभाजन पूर्णांक देता है भले ही परिणाम फ्लोट होना चाहिए। इसे प्राप्त करने के लिए नीचे एक उदाहरण है:
--1--
declare @weird_number_float float
set @weird_number_float=22/7
select @weird_number_float
--2--
declare @weird_number_decimal decimal(18,10)
set @weird_number_decimal=22/7
select @weird_number_decimal
--3--
declare @weird_number_numeric numeric
set @weird_number_numeric=22/7
select @weird_number_numeric
--Right way
declare @weird_number float
set @weird_number=cast(22 as float)/cast(7 as float)
select @weird_number
बस आखिरी ब्लॉक 3,14285714285714 लौटाएगा। सही सटीकता के साथ परिभाषित दूसरे ब्लॉक के बावजूद, परिणाम 3.00000 होगा।