创建数值型集合和格式化数值
创建数值型的Range、List和Array
有的时候,我们需要创建一个范围、列表或数字数组,用于for循环或测试目的。这时可以使用Int类的to方法创建一个包含所需元素的范围,代码如下:
// 创建数值的Range、List和Array val r1 = 1 to 10 r1.foreach(println) // 设置步长 val r2 = 1 to 10 by 2 r2.foreach(println) val r3 = 1 to 10 by 3 r3.foreach(println) // 常用于for循环 for (i <- 1 to 5) println(i) // 也可用until代替to for (i <- 1 until 5) println(i) // 将一个Range转为Array或List val xArray = 1 to 10 toArray // val xArray = (1 to 10).toArray val xList = 1 to 10 toList // val xList = (1 to 10).toList // 创建随机长度范围 var range1 = 0 to scala.util.Random.nextInt(10) // 利用for/yield,不仅仅可以生成数值序列 var range2 = for (i <- 1 to 5) yield i * 2 var range3 = for (i <- 1 to 5) yield i.toDouble
格式化数值和货币
通常在打印输出时,希望格式化数字或货币以控制小数点和逗号。那么对于基本的数字格式,可使用f字符串插值器:
// 格式化数值和货币 val pi = scala.math.Pi println(f"$pi%1.5f") println(f"$pi%1.5f") println(f"$pi%1.2f") println(f"$pi%06.2f")
向数字添加千分位(逗号)的一个简单方法是使用java.text.NumberFormat类的getIntegerInstance方法。
// 使用java.text.NumberFormat类的getIntegerInstance方法 val formatter = java.text.NumberFormat.getIntegerInstance println(formatter.format(10000)) // 10,000 println(formatter.format(1000000)) // 1,000,000
也可以用getIntegerInstance方法设置语言环境:
// 还可以指定地区 val locale = new java.util.Locale("de", "DE") val formatter2 = java.text.NumberFormat.getIntegerInstance(locale) println(formatter2.format(1000000)) // 1.000.000
可以使用getInstance返回的格式化器处理浮点值:
// 处理浮点值 val formatter3 = java.text.NumberFormat.getInstance println(formatter3.format(10000.33)) // 10,000.33
对于货币输出,使用getCurrencyInstance返回的格式化器:
// 处理货币 val formatter4 = java.text.NumberFormat.getCurrencyInstance println(formatter4.format(123.456789)) // ¥123.46 println(formatter4.format(1234.56789)) // ¥1,234.57 println(formatter4.format(12345.6789)) // ¥12,345.68 println(formatter4.format(123456.789)) // ¥123,456.79
下面这种方法用来处理国际货币:
// 处理国际化货币 import java.util.{ Currency, Locale } val de = Currency.getInstance(new Locale("de", "DE")) // de: java.util.Currency = EUR formatter4.setCurrency(de) println(formatter4.format(123456.789)) // EUR123,456.79