一尘不染

在Swift中获取双精度的小数部分

swift

我正在尝试快速分隔双精度数的十进制和整数部分。我尝试了多种方法,但是它们都遇到了相同的问题…

let x:Double = 1234.5678
let n1:Double = x % 1.0           // n1 = 0.567800000000034
let n2:Double = x - 1234.0        // same result
let n3:Double = modf(x, &integer) // same result

有没有一种方法可以获取0.5678而不是0.567800000000034,而无需将数字转换为字符串?


阅读 520

收藏
2020-07-07

共1个答案

一尘不染

无需将其转换为字符串,您可以将舍入到小数点后的位数,如下所示:

let x:Double = 1234.5678
let numberOfPlaces:Double = 4.0
let powerOfTen:Double = pow(10.0, numberOfPlaces)
let targetedDecimalPlaces:Double = round((x % 1.0) * powerOfTen) / powerOfTen

您的输出将是

0.5678

2020-07-07