2013-06-17 14 views
11

स्कैला में Double.isNaN है जो संख्या को पहचानने के लिए नहीं है लेकिन Double.isInf को पहचानने के लिए (सकारात्मक या नकारात्मक) अनंतता है।स्कैला में अनंत मूल्यों का पता कैसे लगाया जाए?

क्यों? मैं यह जांचना चाहता हूं कि पैरामीटर एक "असली" संख्या है (यानी एक संख्यात्मक मान है)। इसे एक स्ट्रिंग में परिवर्तित करना और "inf" या कुछ की जांच करना यह होगा, लेकिन एक बेहतर तरीका होना चाहिए?

सी में की तरह ++: http://en.cppreference.com/w/cpp/numeric/math/isinf

स्काला 2.10

उत्तर

19

स्काला के Double एक isInfinite विधि है का उपयोग करना, और Neg/Pos वेरिएंट:

scala> val a = 22.0 
a: Double = 22.0 

scala> a.isInfinite 
res0: Boolean = false 

scala> val b = 2.0/0 
b: Double = Infinity 

scala> b.isInfinite 
res1: Boolean = true 

scala> b.isPosInfinity 
res4: Boolean = true 
+0

धन्यवाद। पता नहीं कैसे मैं इसे याद किया। – akauppi

+1

@akauppi शायद क्योंकि आरपीएल इसे स्वत: पूर्ण नहीं करता है। मुझे लगता है कि ग्रहण इसे पेश करेगा। –

+0

@ सोम-स्नीट ओह, अच्छा बिंदु। आईडीईए उन्हें दिखाता है। (मुझे लगता है कि Netbeans प्लगइन भी) – gourlaysama

4

क्या हर किसी ने कहा है, के साथ साथ इस:

scala> val bar = Double.NaN 
bar: Double = NaN 

scala> bar == Double.NaN 
res0: Boolean = false 

ऐसा कोई नियम लागू होते हैं: अलग isNaN के लिए कारण यह है कि NaN के साथ तुलना खास है है अनंत के लिए, इसलिए विशेष चेक फ़ंक्शन की आवश्यकता नहीं है (साइन को संभालने की सुविधा को छोड़कर):

scala> val foo: Double = Double.PositiveInfinity 
foo: Double = Infinity 

scala> foo == Double.PositiveInfinity 
res1: Boolean = true 
+0

धन्यवाद। जो मुझे थोड़ा भ्रमित लगता है वह है कि डबल। पॉजिटिव इंफिनिटी (भी) लंबे शब्द का उपयोग करती है, जबकि Double.isPosInfinity एक छोटा सा उपयोग करता है। – akauppi

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