SQL सर्वर, विभाजन शून्य देता है


86

इस कोड को मैं उदाहरण में उपयोग कर रहा हूं:

 PRINT @set1
 PRINT @set2

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

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

47
638
0

मैं जानना चाहूंगा कि इसकी 0बजाय वापसी क्यों हो रही है0,073667712


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

जवाबों:


152

या तो सेट 1 और सेट 2 को पूर्णांक के बजाय फ़्लोट घोषित करें या उन्हें गणना के भाग के रूप में फ़्लोट करने के लिए डालें:

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

24

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

तो तुम कर सकते हो

  1. एक या दोनों चरों को फ्लोट / डबल घोषित करें
  2. एक या दोनों चरों को फ्लोट / डबल करने के लिए कास्ट करें।

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


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

11

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


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

10

बस 1.0 से विभाजन के निचले भाग को मसल दें (या जितने चाहें उतने दशमलव स्थान)

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

धन्यवाद दोस्त। आपके कोड ने मुझे इस एक का जवाब देने में मदद की - stackoverflow.com/questions/20532187/… क्या आप मुझे बता सकते हैं कि उस गुणन के कारण होने वाले अतिरिक्त शून्य को कैसे काट दिया जाए? धन्यवाद।
Trojan.ZBOT

2

यदि आप इसे फ्लोट या किसी भी दशमलव प्रारूप के रूप में घोषित करते हैं, तो यह प्रदर्शित होगा

0

केवल

जैसे:

declare @weight float;

SET @weight= 47 / 638; PRINT @weight

आउटपुट: 0

यदि आप आउटपुट को चाहते हैं

.०७,३६,६७,७१२

उदाहरण के लिए

declare @weight float;

SET @weight= 47.000000000 / 638.000000000; PRINT @weight

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

तो आपको @ सेट 1 और @ सेट 2 दोनों को फ्लोट करना होगा :)
anishMarokey

1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.