2013-06-17 29 views
11

Scala có Double.isNaN để phát hiện số không phải một số nhưng không Double.isInf để phát hiện (vô cùng hoặc âm) vô cùng.Làm thế nào để phát hiện các giá trị Infinity trong Scala?

Tại sao? Tôi muốn kiểm tra xem thông số có phải là số "thực" hay không (tức là có giá trị bằng số). Chuyển đổi nó thành một chuỗi và kiểm tra "inf" hoặc một cái gì đó sẽ làm điều đó, nhưng phải có một cách tốt hơn?

Giống như trong C++: http://en.cppreference.com/w/cpp/numeric/math/isinf

Sử dụng Scala 2.10

Trả lời

19

Scala của Double có một phương pháp isInfinite, và Neg/Pos phiên bản:

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

Cảm ơn. Không biết làm thế nào tôi bị mất nó. – akauppi

+1

@akauppi Có thể vì REPL không tự động hoàn thành. Tôi thấy nhật thực sẽ cung cấp nó. –

+0

@ som-snytt oh, điểm tốt. IDEA hiển thị chúng. (Tôi nghĩ rằng plugin Netbeans quá) – gourlaysama

4

mọi người khác Điều gì đã nói, cộng thêm này: lý do cho riêng isNaN là so sánh với NaN là đặc biệt:

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

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

Không quy định như vậy áp dụng cho vô cùng, do đó không cần một chức năng kiểm tra đặc biệt (ngoại trừ sự tiện lợi của việc xử lý dấu hiệu):

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

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

Cảm ơn. Những gì tôi thấy hơi khó hiểu là Double.PositiveInfinity sử dụng từ ngữ dài (quá), trong khi Double.isPosInfinity sử dụng một từ ngắn hơn. – akauppi

Các vấn đề liên quan