2009-11-03 17 views
62

रिटर्न यहाँ कोड मैं उदाहरण में उपयोग कर रहा हूँ है:एसक्यूएल सर्वर, विभाजन शून्य

PRINT @set1 
PRINT @set2 

SET @weight= @set1/@set2; 
PRINT @weight 

यहाँ परिणाम है:

47 
638 
0 

मुझे पता है क्यों यह 0 बजाय लौटा रहा है चाहते हैं 0,073667712

+0

किस डेटा प्रकार @weight है? –

+0

यह एक 'int' है: DECLARE @weight INT – Roch

उत्तर

108

के रूप में या तो SET1 और पूर्णांक के बजाय तैरता के रूप में SET2 घोषित या उन्हें डाली गणना के भाग के रूप तैरता करना चाहते हैं:

SET @weight= CAST(@set1 AS float)/CAST(@set2 AS float); 
11

क्योंकि यह एक पूर्णांक है। आपको उन्हें फ़्लोटिंग पॉइंट नंबर या दशमलव के रूप में घोषित करने की आवश्यकता है, या गणना में इस तरह कास्ट किया जाना चाहिए।

+0

यदि मैं @weight चर को फ्लोट में बदलता हूं, तो क्या यह पर्याप्त है? – Roch

2

अगर आप नाव या किसी दशमलव प्रारूप के रूप में यह घोषणा यह

केवल

उदा प्रदर्शित करेगा:

declare @weight float; 

SET @weight= 47/638; PRINT @weight 

आउटपुट: 0

आप उत्पादन

0,073667712

जैसे

declare @weight float; 

SET @weight= 47.000000000/638.000000000; PRINT @weight 
+0

हम ठीक है अब मैं इसे प्राप्त करता हूं लेकिन दो संख्याओं को मैं विभाजित करना चाहता हूं वेरिएबल्स हैं, और ऐसा लगता है कि .0000 चर में निर्दिष्ट नहीं है। – Roch

+0

इसलिए आपको @ set1 और @ set2 दोनों को फ्लोट करने की आवश्यकता है :) – anishMarokey

13

जब आप एक div में केवल पूर्णांक का उपयोग करते हैं आइसियन, आपको पूर्णांक विभाजन मिलेगा। जब आप (कम से कम एक) डबल या फ्लोट का उपयोग करते हैं, तो आपको फ़्लोटिंग प्वाइंट डिवीजन (और वह उत्तर जो आप प्राप्त करना चाहते हैं) प्राप्त करेंगे।

तो तुम

  1. एक या नाव के रूप में चर के दोनों/डबल घोषणा कर सकते हैं
  2. एक डाली या चर के दोनों डबल फ्लोट करने के लिए /।

केवल पूर्णांक विभाजन का नतीजा दोहराएं न करें: विभाजन पहले से ही पूर्णांक विभाजन के रूप में किया गया था, इसलिए दशमलव के पीछे की संख्या पहले ही खो चुकी है।

+1

+1 क्योंकि मुझे लगता है कि आपने इसे थोड़ा बेहतर समझाया है और उल्लेख किया है कि केवल एक मान को फ़्लोट/डबल – Chaulky

7

सीधे शब्दों में mutiply 1.0 से विभाजन के नीचे (या के रूप में कई दशमलव स्थानों के रूप में आप चाहते)

PRINT @set1 
PRINT @set2 
SET @weight= @set1/@set2 *1.00000; 
PRINT @weight 
+0

धन्यवाद आदमी होना चाहिए। आपके कोड ने मुझे इसका जवाब देने में मदद की - http://stackoverflow.com/questions/20532187/how-to-calculate-percent-of-total-within-group-by-statement क्या आप मुझे बता सकते हैं कि अतिरिक्त शून्य कैसे छंटनी है उस गुणा के कारण? धन्यवाद। –

1

दो पूर्णांक रिटर्न के एसक्यूएल सर्वर प्रत्यक्ष डिवीजन में पूर्णांक, भले ही परिणाम नाव होना चाहिए। इसमें भर में प्राप्त करने के लिए नीचे दिए गए एक उदाहरण है:

--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 होगा।

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