user48956 - 4 years ago 106
Scala Question

# How to convert any a number to a long

Suppose I have:

``````val number:AnyVal
``````

and I know x may be any number (for our purposes, a Float, Double, Int, Long).

What's the easiest way to convert such a number to a Long:

``````val l = number.toLong   //fails for AnyVal
``````

``````scala> import scala.util.Try
import scala.util.Try

scala> val i1: Int = 23
i1: Int = 23

scala> val l1: Long = 42
l1: Long = 42

scala> val f1: Float = 14.9f
f1: Float = 14.9

scala> val d1: Double = 14.96
d1: Double = 14.96

scala> val b1: Boolean = true
b1: Boolean = true

scala> List(i1, l1, f1, d1, b1) map (x => Try(x.asInstanceOf[Number].longValue)) foreach (println(_))
Success(23)
Success(42)
Success(14)
Success(14)
Failure(java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Number)

scala> List(i1, l1, f1, d1, b1) map (x => Try(x.asInstanceOf[Number].longValue)) foreach (n => println(n.get))
23
42
14
14
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Number
at \$anonfun\$1\$\$anonfun\$apply\$1.apply\$mcJ\$sp(<console>:14)
at \$anonfun\$1\$\$anonfun\$apply\$1.apply(<console>:14)
at \$anonfun\$1\$\$anonfun\$apply\$1.apply(<console>:14)
at scala.util.Try\$.apply(Try.scala:161)
at \$anonfun\$1.apply(<console>:14)
at \$anonfun\$1.apply(<console>:14)
at scala.collection.TraversableLike\$\$anonfun\$map\$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike\$\$anonfun\$map\$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike\$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at .<init>(<console>:14)
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download