数値を見やすく表示するため3桁ずつカンマ区切りと小数桁数を指定できるような書き方を紹介する。
コード
"%,.2f"
で書ける。
// 実数型
val num: Double = 1234567.1234567;
println("%,.2f".format(num)) // 1,234,567.12
カンマ区切りについて
3桁ずつカンマ区切りにフォーマットしたいときは、"%,d"
とカンマを付ける。
// 整数型
val num1: Int = 1234567;
println("%,d".format(num1)) // 1,234,567
// パディング
val num2: Int = 1234;
println("%,8d".format(num2)) // 1,234 (3つ半角スペースが付く))
// 0埋め
val num3: Int = 1234;
println("%0,8d".format(num3)) // 0001,234
パディングやゼロ埋めすると、カンマも一桁分としてカウントされるようです。
関数として使う
桁区切りと小数桁を指定して実数を表示する必要があったため作った関数。
/**
* 桁区切りと小数桁数を整形した文字列を返す
*
* @param[fractionDigits] 小数桁数
* @param[useGroupingSeparator] 桁区切り文字を使用するか
* @return 整形した文字列
*/
fun formattedString(fractionDigits:Int, useGroupingSeparator: Boolean): String{
// nullの場合は空文字
if(this == null) return ""
// 区切り文字を使用しない
var format : String = "%.${fractionDigits}f"
if(usesGroupingSeparator){
// 区切り文字を使用する場合
format = "%,.${fractionDigits}f"
}
return format.format(this)
}
使用例
色々と事情があり、Double型を拡張して使ってみる。
var num1: Double? = 1234567.1234567
var num2: Double? = 1234567.1234567
var num3: Double? = null
fun Double?.formattedString(fractionDigits:Int, usesGroupingSeparator: Boolean): String{
// nullの場合は空文字
if(this == null) return ""
var format : String = "%.${fractionDigits}f"
if(usesGroupingSeparator){
format = "%,.${fractionDigits}f"
}
return format.format(this)
}
println("num1=" + num1.formattedString(3, true)) // num1=1,234,567.123
println("num2=" + num2.formattedString(5, false)) // num2=1234567.12346
println("num3=" + num3.formattedString(3, true)) // num3=
paiza.IOで張り付ければ動く。
参考
【Kotlin】桁区切りと小数桁数を指定できるフォーマッター
Kotlinschedule2019-09-11
【Kotlin】範囲判定の in start..end で実数を使えるか?
Kotlinschedule2019-06-28