Double 值无法转换为 Int64,因为它要么是无限的要么是 NaN

Posted

技术标签:

【中文标题】Double 值无法转换为 Int64,因为它要么是无限的要么是 NaN【英文标题】:Double value cannot be converted to Int64 because it is either infinite or NaN 【发布时间】:2017-06-01 12:48:51 【问题描述】:

我是 swift 新手,我正在 swift 3.0 中开发一个项目,我有一个 UISlider 可以拖动。一旦我拖动它,我就会收到以下崩溃消息:“双值无法转换为 Int64,因为它要么是无限的要么是 NaN”。我的代码如下。我将如何克服这个错误?崩溃的行是“let seekTime = CMTime(value: Int64(val), timescale: 1)”...

@IBAction func sliderValueChanged(_ sender: UISlider) 

    if let duration = player?.currentItem?.duration 

        let totalsecs = CMTimeGetSeconds(duration)
        print("Durtion :",totalsecs)
        let val = Float64(sender.value) * totalsecs

        let totalduration = CMTimeGetSeconds(duration) as Float64

        if(val != totalduration)

            let seekTime = CMTime(value: Int64(val), timescale: 1)
            player?.seek(to: seekTime, completionHandler:  (completedSeek) in

            )
        else
            print("Slider dragged error")
        
    

【问题讨论】:

您的打印语句输出什么 - “持续时间...”?为什么不打印 sender.value、Float64(sender.value) 和 totalsecs 呢?一旦你可以看到所有的值,可能会很明显...... 持续时间为 nan 您是否查看了currentitem.duration nan 的 Google 点击次数? 【参考方案1】:

尝试按照错误信息进行操作...

“双值不能转换为 Int64,因为它要么是无限的要么是 NaN” - 你说它在 let seekTime = CMTime(value: Int64(val), timescale: 1) 行...

所以...由于该行使用 Int64(val),很明显 是问题所在:val 是无限的或 NaN。

所以...val 被设置为let val = Float64(sender.value) * totalsecstotalsecs 由持续时间let totalsecs = CMTimeGetSeconds(duration) 设置...

而且...你说duration 是 NaN。

找出为什么 duration 是 NaN,你就有答案了。

【讨论】:

我得到了 val 和 duration 值 nan 是的...如果 duration 是 NaN 并且您使用持续时间将值分配给 val,那么 当然 @987654332 @ 将是 NaN。 “找出为什么 duration 是 NaN,你就有答案了。”

以上是关于Double 值无法转换为 Int64,因为它要么是无限的要么是 NaN的主要内容,如果未能解决你的问题,请参考以下文章

在Java Double到Int中键入转换

无法将类型 double 隐式转换为 int

收到致命错误:双精度值无法转换为 Int,因为它是无限的或 NaN

mingw32 中的 Double 到 int 隐式转换

从 double 到 const int 的 C++ 类型转换无法正常工作

无法将参数值从 String 转换为 DateTime 的 Int32