gpt4 book ai didi

ios - 使用余数运算符(模)并转换为 Int 返回 false 值

转载 作者:行者123 更新时间:2023-11-30 14:10:09 25 4
gpt4 key购买 nike

我正在快速玩弄并尝试使用remainder operator (modulo)从数字中检索小数位。并来回转换一些值。

以下是一些计算结果:

var doubleVal: Double = 6.2
var intVal: Int = 0

doubleVal = Int(doubleVal % Double(Int(doubleVal)) * 10)
println(doubleVal) // 6.2 % 6.0 => 0.2 * 10 = 2 -> expected result printed

val = 6.6

doubleVal = Int(doubleVal % Double(Int(doubleVal)) * 10)
println(doubleVal) // 6.6 % 6.0 => 0.6 * 10 = 5??? -> unexpected result printed

还有

var val: Double = 6.3
var intVal: Int = 0

intVal = Int(val % Double(Int(val)) * 10)
println(intVal) // 6.3 % 6.0 => 0.3 * 10 = 2??? -> unexpected result printed

var val: Double = 10.3
var intVal: Int = 0

intVal = Int(val % Double(Int(val)) * 10)
println(intVal) // 10.3 % 10.0 => 0.3 * 10 = 3 -> expected result printed

为什么结果相差如此之大?为什么使用6.3计算会导致意外结果2,而使用10.3计算会导致预期结果3 em>?

编辑:

我已阅读 this answer并了解浮点计算。如果计算(0.1 + 0.2) * 10但是你会得到 3 。浮点问题发生在“遥远”的数字上。至少我是这么想的。

让我们把它分成更小的步骤:

var val = 10.6
println(val % Double(Int(val))) -> 0.6
println(val % Double(Int(val)) * 10) -> 6.0
println(Int(val % Double(Int(val)) * 10)) -> 5

我在“后面”没有看到“隐藏”数字,但我仍然得到错误的结果。这里的另一个例子是我在最右边看到一个数字并且在转换时没有出现错误:

var val = 10.3
println(val % Double(Int(val))) -> 0.300000000000001
println(val % Double(Int(val)) * 10) -> 3.00000000000001
println(Int(val % Double(Int(val)) * 10)) -> 3

最佳答案

在这两种情况下,转换为 Int 之前的结果都是“某个非常接近 3.0 的数字”。这个数字可以稍微小一点,也可以大一点,并且纯属巧合,正好等于 3.0。转换为 Int 会丢弃小数点后的所有内容,因此如果“某个非常接近 3.0 的数字”恰好是 2.99999999999999999,则结果为 2;如果它恰好是 3.000000000000001 那么结果就是 3。

关于ios - 使用余数运算符(模)并转换为 Int 返回 false 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863949/

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