gpt4 book ai didi

swift - swift 划分 double 时精度损失

转载 作者:行者123 更新时间:2023-11-28 08:50:45 26 4
gpt4 key购买 nike

我尝试使用 swift 2.1 找到具有给定步长的最小值和最大值之间的步长。

所以我们有一个最小值和一个最大值,都是 Double 类型。步长也是 Double。如果最小值为 0.0,最大值为 0.5,步长为 0.1,显然结果为 6。

但是如果我以 -0.1 作为最小值开始,结果也是 6。但应该是 7,同意吗?

这是我的 Playground 示例:

let min:Double = -0.1
let max:Double = 0.5

let step:Double = 0.1

var steps: Int {
return Int((max - min) / step) + 1
}

print("steps: \(steps)") // returns "steps: 6", but should be 7

如果我们使用 Double 作为 steps 变量,结果是 6.99999999。但是这种精度损失只会在我们的最小值为负时发生。

您知道解决方法吗?我只是不想每次用 Doubles 计算时都 round()

最佳答案

当您使用 Int() 时,它会强制截断您的数字,该数字始终向零舍入。所以,6.9999 变成 6 而不是 7,因为它更接近于零。如果您先使用 round(),它应该会有所帮助:

var steps: Int {
return Int(round((max - min) / step) + 1.0)
}

关于swift - swift 划分 double 时精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265492/

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