gpt4 book ai didi

Swift - 舍入数字

转载 作者:行者123 更新时间:2023-11-28 06:43:13 25 4
gpt4 key购买 nike

我正在尝试快速舍入一个数字,我找到了一个解决方案:

func roundTo(number: Double, precision: Int) -> Double {
var power: Double = 1
for _ in 1...precision {
power *= 10
}
let rounded = Double(round(power * number)/power)
return rounded
}

我有一个模型类,我们称它为 MyObject。

class: My Object {
var preciseNumber: Double?
}

我正在获取一个数字,例如:

var myNumber = 10,0123456789

我使用 roundTo 函数对其进行舍入,得到 10,0123456(小数点后 7 个数字)。

当我打印语句时:

print("myNumber rounded: \(roundTo(myNumber, precision: 7))") //10,0123456 as a result. Great!

接下来我想将四舍五入的 myNumber 赋给我的类变量 preciseNumber,所以:

let roundedNumber = roundTo(myNumber, precise: 7)
print("Rounded number is: \(roundedNumber)") // 10,01234567 as result
self.preciseNumber = roundedNumber
print("Precise number is now: \(self.preciseNumber)") // 10,01234599999997 as result

这可能是什么原因造成的?我想尽可能准确。

最佳答案

所以听起来您的问题是能够比较 float 。最好的方法是找到您需要的精确度。所以不仅仅是检查 numOne == numTwo使用类似 abs(one - two) <= 0.000001 的东西

您可以创建一个 Swift 运算符来非常轻松地为您处理此问题:

// `===` is just used as an example
func === (one: Double, two: Double) -> Bool {
return abs(one - two) <= 0.000001
}

然后你可以检查numOne === numTwo并且它将使用更好的浮点相等性检查。


还有一个幂函数可以帮助简化舍入函数:

let power = pow(10.0, precision)

关于Swift - 舍入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37306947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com