号码操作和返回类型

foo*_*512 0 swift

我对在各种类型之间在Swift中执行数字操作时返回的内容感到困惑.考虑以下:

var castedFoo = Float(7.0/5.0) // returns 1.39999997...

var specifiedTypeFoo:Float = 7/5.0 //returns 1.39999997...

var foo = (7/5.0) //returns 1.4
Run Code Online (Sandbox Code Playgroud)

前两个与最后两个分开的是什么?它们都是返回的浮点数,那么为什么最后一个的值是四舍五入的呢?我知道第一个是铸造的,第二个明确指定为Float,但最后一个也返回Float值.那么是什么让这里与众不同?

das*_*ght 5

根据Swift文档,

除非另有说明,否则浮点文字的默认类型是Swift标准库类型Double,它表示64位浮点数.

换句话说,文字5.0是类型的Double.

前两个示例将结果类型设置为Float; 你的最后一个例子保留了结果的类型a Double,因为a Int和a 的除法结果Double是a Double.由于这种差异,最后的结果具有更高的精度.

  • 换句话说,精度的损失是因为64位的"Double"比32位的"Float"更精确. (2认同)