TimeInterval型からmm:ss.ffのString型への変換
たとえばtimeInterval = 124.04521142
という数値を
02:04.04
というString型の値にしたいのですが、
フォーマットについての理解が浅いためか、以下のように初心者ながらに冗長気味なのがわかります・・・
let min = timeInterval / 60
let sec = Int(timeInterval.truncatingRemainder(dividingBy: 60))
let timeIntervalInteger = Int(timeInterval)
let decimal = timeInterval - Double(timeIntervalInteger)
//timeInterval全体から整数のみを引いて小数だけを取り出す
let decimalInteger = Int(decimal * 100)
//小数の"0."を取り除くため、100倍して小数点以下を切り捨てる
let minSec = String(format: "%02d:%02d%", min, sec)
//まずmm:ssフォーマットにする
let miliSec = String(format: "%02d", decimalInteger)
//ミリ秒をffのフォーマットにする
var str = minSec + "." + miliSec
print(str)
timeIntervalからわざわざ整数部分を引いた上でそれを100倍してから"%02d
のフォーマットで"."
を足すというのはものすごい遠回りな気がします・・・。
timeInterval
をタイマーで0.01秒ごとに1増える整数として扱えば計算は楽になるとは思うのですが、扱いたいものが再生中の曲の現在の再生時間(currentPlaybackTime
)で、
TimeInterval型で引き出しているので、少数 -> mm:ss.ffにしたいのです。