簡體   English   中英

Swift 3:致命錯誤:Double 值無法轉換為 Int,因為它是無窮大或 NaN

[英]Swift 3:fatal error: Double value cannot be converted to Int because it is either infinite or NaN

當我調用這個方法時,收到一個錯誤。 在分配給小時、分鍾或秒期間如何處理 NaN 或無限值?

這是我的代碼:

private func secondsToFormattedString(totalSeconds: Float64) -> String{
    let hours:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 86400) / 3600)

    let minutes:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 3600) / 60)
    let seconds:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 60))

    if hours > 0 {
        return String(format: "%i:%02i:%02i", hours, minutes, seconds)
    } else {
        return String(format: "%02i:%02i", minutes, seconds)
    }
}

您應該檢查totalSeconds是否為有效值,例如:

guard !(totalsSeconds.isNaN || totalSeconds.isInfinite) else {
    return "illegal value" // or do some error handling
}

並檢查這個: Convert Float to Int in Swift

另一種選擇是為此使用格式化程序,我只是想將 Double 轉換為 Int 以使其更容易在我的 UI 中顯示,因此NumberFormatter是完美的,我的 Double 是 NaN 所以這就是NumberFormatter為我提供的,而不是Int 'cast' 提供的fatalError (為什么它不返回一個可選的 Int(String) 呢?)

但是在這個問題的上下文中, DateFormatter是一個很好的解決方案,它可以為您完成整個函數的工作(請記住,創建DateFormatter的成本有點高,因此您不想為您所做的每個字符串格式創建一個但如果有意義,請保持掛起)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM