2_scala_数字操作

//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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值