Это распространенная ошибка округления, поскольку двоичные числа не могут представлять некоторые десятичные числа. Посмотрите здесь .
Здесь - это онлайн-конвертер из десятичного представления в представление с плавающей запятой. Как вы можете видеть, есть ошибка (6.103515625E-8
) из-за преобразования:
Что касается разницы между тем, когда вы печатаете непосредственно с плавающей точкой, или когда вы печатаете объект, у которого есть свойство с плавающей точкой, то это сводится к свойству description
объектов, которые реализуют протокол CustomStringConvertible
. Когда функция print
хочет выполнить печать на консоль, она вызывает _print_unlocked , которая является внутренней функцией с этим блоком:
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
}