2016-02-24 11 views
6

मैं मेगाबाइट्स में जाने वाली बड़ी संख्या को बदलने की कोशिश कर रहा हूं। मैं दशमलवकोल्डफ्यूजन एक पूर्णांक होने के लिए बहुत बड़ा

numeric function formatMB(required numeric num) output="false" { 
    return arguments.num \ 1024 \ 1024; 
    } 

यह तो एक त्रुटि

enter image description here

मैं इस के आसपास कैसे मिलता है फेंकता नहीं चाहते?

+8

कोई कारण नहीं है कि आप केवल '/' (यानी गैर पूर्णांक divisor) का उपयोग नहीं कर सकते हैं और decimals को बंद करने के लिए प्रारूप? मुझे लगता है कि आप प्रेसिजनएवलुएट() या बिगइंटर मैथ का उपयोग कर सकते हैं, लेकिन यह ओवरकिल की तरह लगता है। – Leigh

+2

@ लेघ ओएमजी! सीएफ अनुभव के 3 से अधिक वर्षों और आज मैंने आपकी टिप्पणी पढ़ने के बाद पूर्णांक विभाजक और गैर पूर्णांक विभाजक के बारे में सीखा। मुझे आश्चर्य है कि मुझे यह कैसे याद आया। धन्यवाद लेघ। –

+0

@ तुषार भावर, मेरा अनुभव 5 गुना आपका है और मैं अभी भी इन मंचों पर अन्य लोगों के उत्तरों को पढ़ने से चीजें सीखता हूं। –

उत्तर

7

आप लंबे समय के आकार को नहीं बदल सकते हैं, जो सीएफ पूर्णांक के लिए उपयोग करता है। , तो आप क्या कर रहे हैं

numeric function formatMB(required numeric num) { 
    var numberAsBigInteger = createObject("java", "java.math.BigInteger").init(javacast("string", num)); 
    var mbAsBytes = 1024^2; 
    var mbAsBytesAsBigInteger = createObject("java", "java.math.BigInteger").init(javacast("string", mbAsBytes)); 
    var numberInMb = numberAsBigInteger.divide(mbAsBytesAsBigInteger); 
    return numberInMb.longValue(); 
} 

CLI.writeLn(formatMB(2147483648)); 

लेकिन लेह बताते हैं ... आप शायद बेहतर कर रहे हैं सिर्फ यह कर:: तो आप के बजाय BigInteger करने की आवश्यकता होगी

return floor(arguments.num/(1024 * 1024)); 
+0

* लंबे * छोटे सुधार का आकार। ['Integer'] की क्षमता (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html) यहां सीमित कारक है। 'लांग' की क्षमता बहुत अधिक है। [Trycf.com उदाहरण] (http://trycf.com/gist/f19684aa2d1a740751b0/acf2016?theme=monokai)। – Leigh

1

लांग का आकार, जो सीएफ पूर्णांक के लिए उपयोग करता है

उन लोगों के लिए छोटे सुधार जो टिप्पणियां नहीं पढ़ सकते हैं। सीएफ मुख्य रूप से 32 bit signed Integers, Long (जिसमें बहुत अधिक क्षमता है) का उपयोग करता है।

  • Integer.MAX_VALUE = 2147483647
  • Long.MAX_VALUE = 9223372036854775807

इसके लायक है: तो के रूप में त्रुटि संदेश बताता है, यहाँ आकार की सीमा एक Integer की क्षमता है यह नोट करते हुए कि हालांकि सीएफ अपेक्षाकृत स्थिर है, कुछ गणित और दिनांक कार्यों में भी एक ही सीमा है। उदाहरण के लिए, हालांकि DateAdd तकनीकी रूप से, मिलीसेकंड का समर्थन करता है, तो आप कोशिश करते हैं और एक बहुत बड़ी संख्या का उपयोग करें:

// getTime() - returns number of milliseconds since January 1, 1970 
currentDate = dateAdd("l", now().getTime(), createDate(1970,1,1)); 

... यह ठीक उसी त्रुटि के साथ विफल हो जाएगा क्योंकि "संख्या" पैरामीटर एक पूर्णांक होना चाहिए। इसलिए ध्यान दें कि दस्तावेज "इंटीजर" का उल्लेख करता है। इसका मतलब सिर्फ "संख्या" या "संख्यात्मक" नहीं है ...

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