Pebble Coding

プログラマーの作業メモ

swiftで小数点値フォーマット (update swift3)

C言語での小数点値フォーマット指定をswiftで実現する方法を調べました。
C言語では小数点以下の幅を指定した場合、一つ下の桁が四捨五入されます。

C

printf( "%.2f\n", 12.3456 );  // 12.35
printf( "%.2f\n", 12.0 );  // 12.00

swift

let num = NSNumber(value:val)
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.positiveFormat = "0.00" // "0.##" -> 0パディングしない
formatter.roundingMode = .halfUp // 四捨五入 // .floor -> 切り捨て
var str:String = formatter.string(from: num)!

swiftめっちゃ長い。。なお、NumberFormatterのインスタンス生成のコストも馬鹿にならないので、 頻繁に使う場合は、使いまわさないと遅くなりそうです。
NumberFormatterでは正の値と負の値の場合でのフォーマットをそれぞれ指定することができて、 たくさん書かなければならない分だけ、C言語よりは機能が充実しています。

参考: Using Number Formatters