//string to number
println("100".toInt)
println("100".toFloat)
//raise NumberFormatException
//println("foo".toLong)
object StringUtil {
implicit class StringToInt(s: String) {
def toInt(radix: Int): Option[Int] = {
try {
Some(Integer.parseInt(s, radix))
}
catch {
case e: NumberFormatException => None
}
}
}
}
import StringUtil._
val num = "1110".toInt(2)
println(f"num = ${num.get}%d, num = 0x${num.get}%x")
val num1 = "100".toInt(16)
println(f"num1 = ${num1.get}%d, num1 = 0x${num1.get}%x")
println("foo".toInt(10).getOrElse("Ooops!"))
val cnum = "oops!".toInt(10) match {
case Some(x) => x
case None => 0
}
println(s"oops! convert to int, result is $cnum")
println()
//number convert
println(1.toFloat)
println(100.0.toInt)
println(19.toLong)
val a = 1000L
println(s"$a isValidByte: ${a.isValidByte}")
println(s"$a isValidShort: ${a.isValidShort}")
println(s"0x100 convert to String: ${0x100.toString}")
println()
//number init
//var [name]:[Type] = [initial value]
val i = 1L
val j = 1.3d
val k = 0.4f
println(i.getClass.getName)
println(j.getClass.getName)
println(k.getClass.getName)
println()
//float compare
object MathUtils {
def approximatelyEqual(x: Double, y: Double, precision: Double) = {
if ((x - y).abs < precision) true else false
}
}
val a1 = 0.3
val b1 = 0.1 + 0.2
println(s"$a1 equal to $b1 is ${a1 == b1}")
println(s"$a1 approximatelyEqual to $b1 is ${MathUtils.approximatelyEqual(a1, b1, 0.000001)}")
//handle very large number
//BigInt and BigDecimal support +,-,*,/,+= and so on.
val bi = BigInt("1")
val bd = BigDecimal("3.141592")
println(bi + " " + bd)
println(s"Byte max value = ${Byte.MaxValue}")
println(s"Short max value = ${Short.MaxValue}")
println(s"Int max value = ${Int.MaxValue}")
println(s"Long max value = ${Long.MaxValue}")
println(s"Double max value = ${Double.MaxValue}")
//println(s"Char max value = ${Char.MaxValue}")
println()
//random number
val r = scala.util.Random
//r.setSeed(1000)
println(r.nextInt)
//get random int range: [0, 100)
println(r.nextInt(100))
val range = 0 to r.nextInt(10)
println(range)
val vec = for (i <- 0 to scala.util.Random.nextInt(10)) yield i*2
println(vec)
println()
//create range, list, array of numbers
for (i <- 0 to 10 by 2) print(i + " ")
println()
for (i <- 0 until 10 by 2) print(i + " ")
println()
val list = (0 to 10 by 2).toList
println(list)
println()
//format number and currency
val locale = new java.util.Locale("cn", "ZH")
val formatterInt = java.text.NumberFormat.getIntegerInstance(locale)
println(formatterInt.format(100000))
val formatterF = java.text.NumberFormat.getInstance
println(formatterF.format(1234567.90))
val formatterC = java.text.NumberFormat.getCurrencyInstance
println(formatterC.format(1234567.82))