Ios 如何从Swift中的无限数中导出值?
我下面的函数偶尔会产生一个无穷大的数。我原以为我可以使用下面的舍入函数来避免使用无限数…换句话说,1.333333333INF舍入为1.33,但是编译器仍然将INF的结果视为无限,我如何舍入,以便我仍然可以在这里输出值?具体地说,我正在尝试编码为JSON并得到以下错误: metadata ERROR=invalidValueinf,Swift.EncodingError.ContextcodingPath:[Watch_Extension.HockeyTrackerMetadata.CodingKeys in _B2A710AF20490DAF638D1E0A01E4982.maximumCapableSpeed],调试说明:无法在JSON中直接编码Double.infinity。使用JSONECODER.NonconformingFlogencodingStrategy.convertToString指定值的编码方式。underlineError:nilIos 如何从Swift中的无限数中导出值?,ios,swift,double,infinite,Ios,Swift,Double,Infinite,我下面的函数偶尔会产生一个无穷大的数。我原以为我可以使用下面的舍入函数来避免使用无限数…换句话说,1.333333333INF舍入为1.33,但是编译器仍然将INF的结果视为无限,我如何舍入,以便我仍然可以在这里输出值?具体地说,我正在尝试编码为JSON并得到以下错误: metadata ERROR=invalidValueinf,Swift.EncodingError.ContextcodingPath:[Watch_Extension.HockeyTrackerMetadata.Coding
无穷大值意味着该值是正无穷大或负无穷大,可能是因为它是被零除或类似数学运算的结果。这并不意味着该值是非终止小数 确保maxHeartRateUnwrapped和AverageTimeHeartRateUnwrapped不为零
//Calculation
func calculateMaximumAndAverageSkatingEfficiency() {
let heartRateUnit:HKUnit = HKUnit(from: "count/min")
let heartRatesAsDouble = heartRateValues.map { $0.quantity.doubleValue(for: heartRateUnit)}
let maxHeartRate = heartRatesAsDouble.max()
guard let maxHeartRateUnwrapped = maxHeartRate else { return }
maximumEfficiencyFactor = ((1760.0 * (maxSpeed / 60)) / maxHeartRateUnwrapped).round(to: 2)
guard let averageIceTimeHeartRateUnwrapped = averageIceTimeHeartRate else { return }
averageEfficiencyFactor = ((1760.0 * (averageSpeed / 60)) / averageIceTimeHeartRateUnwrapped).round(to: 2)
}
//Round extension I am using
extension Double {
func round(to places: Int) -> Double {
let divisor = pow(10.0, Double(places))
return Darwin.round(self * divisor) / divisor
}
}
//Usage
if let averageEfficiencyFactorUnwrapped = averageEfficiencyFactor {
metadata.averageEfficiencyFactor = averageEfficiencyFactorUnwrapped.round(to: 2)
}