gpt4 book ai didi

swift - 结构内部的 Swift float 问题

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

我遇到一个问题,当它在一个结构中时,swift 正在改变我的浮点值。我不认为这发生在旧版本的 swift 上,但它现在发生在 4.1 上。下面的代码示例...想法?

var f = Float(4.111)

print(f) // prints 4.111

struct FloatContainer {
var f: Float
}

let container = FloatContainer(f: f)

print(container) // prints FloatContainer(f: 4.11100006)

最佳答案

这是一个常见的舍入错误,因为二进制不能表示某些十进制数。看看here .

Here是一个从十进制到浮点表示的在线转换器。如您所见,由于转换而出现错误 ( 6.103515625E-8):

Floating Point Converter

至于直接打印 float 与打印具有浮点属性的对象之间的区别,归结为 description实现 CustomStringConvertible 的对象的属性协议(protocol)。当 print函数想要打印到控制台,它调用 _print_unlocked ,这是一个具有此 block 的内部函数:

if case let printableObject as CustomStringConvertible = value {
printableObject.description.write(to: &target)
return
}

因此您可以将代码更改为这样以获得预期的输出:

struct FloatContainer : CustomStringConvertible {
var description: String {
get {
return f.description
}
}
var f: Float
}

关于swift - 结构内部的 Swift float 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52006079/

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