Swift中如何处理NaN值?三角函数计算height返回NaN问题
Swift计算cos表达式得到NaN的解决方案
NaN即非数值(Not a Number),是非法数值运算的输出结果,你遇到的问题可以按以下步骤排查解决:
- 第一步:校验theta的取值合法性
theta本身为NaN、无穷大时,cos运算后结果仍为NaN,可在运算前加合法校验:
同时排查theta的上游生成逻辑:如果theta来自字符串转数值、负数求平方根、0除以0等操作,先修复上游逻辑,保证生成的theta是有效有限值。// 保证theta是合法有限值再执行运算 guard theta.isFinite else { // 此处补充theta非法时的兜底逻辑,比如赋值默认角度值 return } - 第二步:校验theta的单位是否匹配函数要求
Swift内置的cos(_:)函数入参要求为弧度值,如果你传入的theta是角度值,需要先做单位转换再运算:// 角度转弧度 let radianTheta = theta * .pi / 180 height = 147 - (88 * cos(radianTheta)) - 第三步:处理可选类型的theta
如果theta是可选数值类型(Double?/Float?),禁止直接强制解包,使用安全解包逻辑获取有效值:guard let validTheta = theta, validTheta.isFinite else { // 可选值为nil或数值非法时的兜底逻辑 return } height = 147 - (88 * cos(validTheta))
如果需要快速兜底避免业务逻辑受NaN影响,可以在运算后加默认值 fallback:
height = 147 - (88 * cos(theta)) // 结果为NaN时替换为业务默认值 if height.isNaN { height = 0 }
内容的提问来源于stack exchange,提问作者sanjay shiva
相关产品推荐
相关产品推荐

