2009-09-16 17 views
5

में ओवरफ़्लो मैं सोच रहा था कि कोई मेरी मदद कर सकता है, क्योंकि मैं जो समझता हूं वह अंधेरा हो गया है, यह एक साधारण त्रुटि का एक आसान कारण है।एएसपी क्लासिक

y1 = denom1 - x1 mod denom1 

कोई भी विचार: मैं इस त्रुटि

Microsoft VBScript runtime error '800a0006' 
Overflow: 'x1' 

उपरोक्त कोड में इस लाइन की वजह से मिलता है

doRound1(x1) 
    denom1 = 5 
    y1 = denom1 - x1 mod denom1 
    if y1 <> denom1 then 
    x1= x1+y1 
    end if 

    doRound1=x1 
End function 

'theCalc = 20488888888.684 
    theCalc = cDbl(11111111111) * 1.844 
    doRound1(theCalc) 

:

मैं इस कोड है? जैसा कि मैंने कहा, मैं इस पीएम में अंधेरा चला गया हूँ

+0

क्या यह हो सकता है कि x1 एक इंट/लांग के लिए एक झुकाव बहुत बड़ा हो? – Kane

उत्तर

1

मेरा मानना ​​है कि जब आप मूल्यों को विशेष रूप से परिभाषित नहीं करते हैं, तो एएसपी क्लासिक एक संख्यात्मक मान मानता है (जो केवल 32767 है)। देशांतर

Function doRound1(x1) 
    x1 = CDbl(x1) 
    denom1 = CDbl(5) 
    y1 = denom1 - x1 mod denom1 
    if y1 <> denom1 then 
    x1= x1+y1 
    end if 

    doRound1=x1 
End function 

नोट होने के लिए अपने मूल्यों के लिए मजबूर कर प्रयास करें: मैं वास्तव में इस परीक्षण नहीं किया।

+0

इस पर उत्तर (http://stackoverflow.com/questions/316312/misunderstanding-of-long-data-type-in-vba) इस बारे में थोड़ी अधिक जानकारी में जाता है। – NotMe

+0

@ सी। रॉस: x1 = CLng (x1) 'ओवरफ़्लो:' सीएलएनजी ' –

+0

असल में, उनको संभवतः डबल्स होना चाहिए। हालांकि, मुझे संदेह है कि आपके पास अन्यथा सही जवाब है। मैं युगल की सिफारिश करता हूं क्योंकि वीबीस्क्रिप्ट में एक लम्बाई अभी भी 2 बी पर गिर जाती है; पोस्ट में टिप्पणियों के आधार पर ओपी का इनपुट भी दोगुना प्रतीत होता है। –

4

जवाब PRB: "Overflow" with Integer Division and MOD Operator पर प्रतीत होता है:

मॉड ऑपरेटर और पूर्णांक विभाजन ऑपरेटर के लिए Visual Basic मदद विषय() बताते हैं कि चल बिन्दु संख्या अभिव्यक्ति में उपयोग किया जाता है, वे पहले लंबे समय में परिवर्तित हो जाते हैं। इस प्रकार, यदि चल बिंदु संख्या एक लंबे समय से (2,147,483,647) के अधिकतम मान से अधिक, या एक लंबी (-+२१४७४८३६४८) के लिए न्यूनतम मूल्य से कम है, एक अतिप्रवाह त्रुटि हो जाएगा।

जवाब के रूप में अच्छी तरह से वहाँ उपलब्ध है:

निम्नलिखित कोड दर्शाता है कि कैसे करने के लिए पूर्णांक विभाजन करते हैं और अंकगणित सापेक्ष जब एक संकार्य के आकार अतिप्रवाह पैदा करने के लिए पर्याप्त रूप से बड़े है:

Dim dblX as Double 
Dim dblY as Double 
dblX = 2147483648    ' numerator 
dblY = 123      ' denominator 

' round off the numerator and denominator (ensure number is .0) 
dblX = INT(dblX + .5)   
dblY = INT(dblY + .5)  

' Emulate integer division 
MsgBox FIX(dblX/dblY)    
' Emulate modulo arithmetic 
MsgBox dblX - (dblY * FIX(dblX/dblY)) 
+0

सीआईएनटी (एक्स) के बजाय इंट (एक्स +5) का कोई कारण उपयोग किया जाता है? – AnthonyWJones

+0

साथ ही कोड को वीबीस्क्रिप्ट में संपादित करना बेहतर होगा क्योंकि यह एक क्लासिक एएसपी प्रश्न है जो वीबी 6 प्रश्न नहीं है। +1 हालांकि – AnthonyWJones

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