自定义Swift数值除法运算符出现计算错误的技术咨询
问题分析与修复方案
嘿,这个问题其实一眼就能看出症结——你第二个除法运算符的实现逻辑完全写反啦!
错误根源
看你定义的第二个/函数:
func / <F: BinaryFloatingPoint, I: BinaryInteger>(lhs: I, rhs: F) -> F { return rhs / F(lhs) }
当你调用b/a(b是UInt8类型的整数,a是Double类型的浮点数)时,这个函数会被触发。按照你的预期,应该是「把整数转成浮点数后除以浮点数」,也就是F(b)/a,但你现在写的是rhs/F(lhs)——相当于把被除数和除数直接颠倒了,自然会得到10.0/8.0=1.25,而不是正确的8.0/10.0=0.8。
修复后的代码
把第二个函数的返回值改成F(lhs)/rhs就完美解决了:
func / <F: BinaryFloatingPoint, I: BinaryInteger>(lhs: F, rhs: I) -> F { return lhs / F(rhs) } func / <F: BinaryFloatingPoint, I: BinaryInteger>(lhs: I, rhs: F) -> F { return F(lhs) / rhs }
测试验证
现在再运行你的测试代码:
let a = 10.0 let b: UInt8 = 8 print(a/b) // 输出1.25(符合预期) print(b/a) // 输出0.8(终于正确啦!)
额外小提示
如果想让你的运算符更健壮,可以考虑添加除以零的判断逻辑,避免出现运行时崩溃的情况哦~
内容的提问来源于stack exchange,提问作者oneWayTicket
相关产品推荐
相关产品推荐

