gpt4 book ai didi

Swift - 测量转换(到 :) miles to feet gives wrong result

转载 作者:可可西里 更新时间:2023-11-01 00:55:36 25 4
gpt4 key购买 nike

我一直在使用 Measurement 对象从大部分长度进行转换。但我有一个奇怪的问题。如果我将英里转换为英尺,我几乎可以得到正确的答案。

import Foundation

let heightFeet = Measurement(value: 6, unit: UnitLength.feet) // 6.0ft
let heightInches = heightFeet.converted(to: UnitLength.inches) // 72.0 in
let heightMeters = heightFeet.converted(to: UnitLength.meters) // 1.8288 m

let lengthMiles = Measurement(value: 1, unit: UnitLength.miles) // 1.0 mi

let lengthFeet = lengthMiles.converted(to: UnitLength.feet) // 5279.98687664042 ft

// Should be 5280.0

除了最后一个lengthFeet之外,它们都有效。在我的 Playground 上(Xcode 版本 9.2 (9C40b)),它返回 5279.98687664042 英尺。我还在常规应用程序构建中进行了测试,结果相同。

有什么想法吗?

最佳答案

“英里”单位在 Foundation 库中定义不正确,如

print(UnitLength.miles.converter.baseUnitValue(fromValue: 1.0))
// 1609.34

哪里是correct value1.609344。作为 Foundation 库中该缺陷的解决方法,您可以定义您的“更好”英里单位:

extension UnitLength {
static var preciseMiles: UnitLength {
return UnitLength(symbol: "mile",
converter: UnitConverterLinear(coefficient: 1609.344))
}
}

并使用它给出了预期的结果:

let lengthMiles = Measurement(value: 1, unit: UnitLength.preciseMiles)
let lengthFeet = lengthMiles.converted(to: UnitLength.feet)
print(lengthFeet) // 5280.0 ft

当然,如Alexander said ,使用单位进行计算时可能会出现舍入误差,因为测量使用二进制浮点值作为底层存储。但造成这种“明显偏离”结果的原因是错误的定义英里单位。

关于Swift - 测量转换(到 :) miles to feet gives wrong result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373300/

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