我最近一直在努力尝试,而且我遇到了一个相当简单的问题。
在Obj-C中,当我想得到一个浮点数的小数位时,请执行以下操作:
float x = 3.141516
int integer_x = (int)x;
float fractional_x = x-integer_x;
//Result: fractional_x = 0.141516
在Swift中:
let x:Float = 3.141516
let integerX:Int = Int(x)
let fractionalX:Float = x - integerX
- >由于错误匹配类型
,这会导致错误任何想法如何正确地做到这一点?
先谢谢
马尔特
答案 0 :(得分:13)
使用modf
功能:
let v = 3.141516
var integer = 0.0
let fraction = modf(v, &integer)
println("fraction: \(fraction)");
输出:
分数:0.141516
对于float而不是double,只需使用:modff
答案 1 :(得分:7)
使用替换模数运算符的.truncatingRemainder(dividingBy:)
( x%1 ),其中(对于模数)
给出小数部分。
let x:Float = 3.141516
let fracPart = x.truncatingRemainder(dividingBy: 1) // fracPart is now 0.141516
fracPart
将采用以下值: 0.141516 。这适用于double
和float
。
答案 2 :(得分:3)
问题是你不能减去Float和Int,你应该把这个值中的一个转换为另一个,试试这个:
let fractionalX:Float = x - Float(integerX)
答案 3 :(得分:3)
Swift 3不喜欢模数运算符%
。它希望我使用truncatingRemainder
类型的Double
。
let x1:Double = 123.00
let t1 = x1.truncatingRemainder(dividingBy: 1)
print("t1 = \(t1)")
let x2:Double = 123.45
let t2 = x2.truncatingRemainder(dividingBy: 1)
print("t2 = \(t2)")
产生输出:
t1 = 0.0
t2 = 0.450000000000003
要移除3千万亿个神器,您应该对结果进行舍入。
答案 4 :(得分:-1)
为什么要使用int?
相反如此:
import Darwin
let x = 3.1415926
let xf = x - (x > 0 ? floor(x) : ceil(x))
此处默认使用双打。如果它是您需要的,请随意使用花车:
let x: Float = 3.1415926
这就是你要找的东西吗?