[vba] क्यों कोशिकाएं (1,1) = 500 * 100 अतिप्रवाह का कारण बनती हैं लेकिन 50000 * 100 नहीं है?


Answers

Integer लिए अधिकतम मूल्य 32767 और 50000 से अधिक इसे Long प्रकार के रूप में डाला जाता है। इस प्रकार परिणाम Long ठीक से फिट बैठते हैं। लेकिन पहले मामले में सब कुछ Integer प्रकारों के साथ किया जाता है और यह बहती है।

(Integer=500) * (Integer=100) = (Integer=50000)  'Overflow
(Long=50000) * (Integer=100) = (Long=5000000)    'Ok
Question

खैर, मैंने अभी एक सरल सब बनाया है और यह अतिप्रवाह की त्रुटि देता है। हालांकि, मुझे कोड के साथ कुछ भी गलत नहीं दिख रहा है, और यह वास्तव में अजीब है क्योंकि 50000 * 100 500 * 100 से काफी बड़ा है।

sub add()
    'This will cause an overflow error
    cells(1,1) = 500 * 100
    'But this won't
    cells(2,2) = 50000 * 100
end sub



मुझे निम्न लिंक से जवाब मिला: माइक्रोसॉफ्ट से लिंक

ऐसा लगता है कि मैंने संख्या को एक प्रकार भी असाइन नहीं किया है, एक्सेल स्वचालित रूप से इसकी लंबाई के आधार पर इसे असाइन करता है। इस प्रकार, 500 को पूर्णांक के रूप में परिभाषित किया गया है और परिणाम 50,000 प्रकार पूर्णांक के लिए बहुत बड़ा है। इसीलिए।




Related