###前提・実現したいこと
たとえばtimeInterval = 124.04521142
という数値を
02:04.04
というString型の値にしたいのです。
###該当のソースコード
以下のようなコードを書いてみましたが、
初心者ながらかなり冗長な気がします・・・
Swift
1var timeInterval = 124.04521142 2let min = timeInterval / 60 // -> 2(分) 3let sec = Int(timeInterval.truncatingRemainder(dividingBy: 60)) // -> 4(秒) 4 //mm:ssを割り出す 5 6let timeIntervalInteger = Int(timeInterval) 7let decimal = timeInterval - Double(timeIntervalInteger) //124.04521142 - 124.0 = 0.04521142 8 //timeInterval全体から整数のみを引いて小数だけを取り出す 9let decimalInteger = Int(decimal * 100) // -> 4 10 //decimalをString型にしたときの"0."を取り除くため、100倍してそれ以降の数字を切り捨てる 11let minSec = String(format: "%02d:%02d%", min, sec) // -> 02:04 12 13let miliSec = String(format: "%02d", decimalInteger) // -> 04 14 //ミリ秒をffのフォーマットにする 15 16var str = minSec + "." + miliSec // -> 02:04.04
まず小数点以下の数値をとるために、timeIntervalをInt型にして小数点以下を切り捨てた数値を出し、さらにそのあとにtimeIntervalから整数部分を引き、小数点以下のみの数値を出し、それをわざわざ100倍してまた少数点以下を切り捨て、%02d
フォーマットで04
にしたあとにmm:ss
と"."
を足してそれらしくしています。
なんらかのフォーマットなどでもう少し単純化できないものかと思っています。
###試したこと
timerを使って0.01秒ごとに整数が1増えるという処理にすれば比較的簡単に扱えるとは思うのですが、
実際の場面で扱いたいのはMPMusicPlayerController
のcurrentPlaybackTime
でTimeInterval型であるため、できれば直接TimeInterval型からString型にしたいのです。
###補足情報(言語/FW/ツール等のバージョンなど)
Swift3 Xcode8

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/18 09:37