首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift中将Float转换为Int

在Swift中将Float转换为Int
EN

Stack Overflow用户
提问于 2014-06-04 13:46:52
回答 13查看 218.6K关注 0票数 213

我想在Swift中将Float转换为Int。像这样的基本类型转换不起作用,因为与Objective-C中的floatint不同,这些类型不是原语

代码语言:javascript
复制
var float: Float = 2.2
var integer: Int = float as Float

但这会产生以下错误消息:

“Float”不能转换为“Int”

你知道如何将属性从Float转换为Int吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2014-06-04 13:59:49

您可以在Swift中将Float转换为Int,如下所示:

代码语言:javascript
复制
var myIntValue:Int = Int(myFloatValue)
println "My value is \(myIntValue)"

你也可以通过@paulm的评论来实现这个结果:

代码语言:javascript
复制
var myIntValue = Int(myFloatValue)
票数 334
EN

Stack Overflow用户

发布于 2016-11-03 18:09:51

有很多方法可以精确地对数字进行舍入。您最终应该使用swift的标准库方法rounded()来以所需的精度对浮点数进行舍入。

要向上舍入,请使用.up规则:

代码语言:javascript
复制
let f: Float = 2.2
let i = Int(f.rounded(.up)) // 3

要将向下舍入,请使用.down规则:

代码语言:javascript
复制
let f: Float = 2.2
let i = Int(f.rounded(.down)) // 2

要舍入到最近的整数,请使用.toNearestOrEven规则:

代码语言:javascript
复制
let f: Float = 2.2
let i = Int(f.rounded(.toNearestOrEven)) // 2

请注意以下示例:

代码语言:javascript
复制
let f: Float = 2.5
let i = Int(roundf(f)) // 3
let j = Int(f.rounded(.toNearestOrEven)) // 2
票数 30
EN

Stack Overflow用户

发布于 2015-08-29 03:18:29

转换很简单:

代码语言:javascript
复制
let float = Float(1.1) // 1.1
let int = Int(float) // 1

但这并不安全:

代码语言:javascript
复制
let float = Float(Int.max) + 1
let int = Int(float)

将由于一次漂亮的崩溃:

代码语言:javascript
复制
fatal error: floating point value can not be converted to Int because it is greater than Int.max

所以我创建了一个处理溢出的扩展:

代码语言:javascript
复制
extension Double {
    // If you don't want your code crash on each overflow, use this function that operates on optionals
    // E.g.: Int(Double(Int.max) + 1) will crash:
    // fatal error: floating point value can not be converted to Int because it is greater than Int.max
    func toInt() -> Int? {
        if self > Double(Int.min) && self < Double(Int.max) {
            return Int(self)
        } else {
            return nil
        }
    }
}


extension Float {
    func toInt() -> Int? {
        if self > Float(Int.min) && self < Float(Int.max) {
            return Int(self)
        } else {
            return nil
        }
    }
}

我希望这能帮助到一些人

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24029917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档