实现可满足0.1+0.2=0.3的add函数及通过单元测试方案求助
问题排查与解决实现
核心错误点:你提交的两个实现方案都将赋值运算符=误写为相等判断运算符==,代码中的x == int(x)、x == round(x, 1)仅会返回布尔判断结果,不会对x、y变量做任何修改,逻辑完全没有生效,这是两个方案都失败的首要原因
可行实现方案
方案1:轻量精度修正(适配作业需求)
仅针对常规浮点数精度误差做修正,代码改动最小,完全满足作业要求的测试用例:
def add(x, y, tol=1e-9): result = x + y # 若结果与四舍五入到9位小数的值差值在容忍范围内,返回修正后的值,抵消二进制精度误差 if abs(round(result, 9) - result) <= tol: return round(result, 9) return result
方案2:十进制精确运算(通用高精度场景)
如果需要完全规避二进制浮点数的存储精度缺陷,使用Python内置decimal模块实现精准的十进制运算:
from decimal import Decimal, getcontext def add(x, y, precision=10): # 设置运算精度 getcontext().prec = precision # 先将入参转为字符串再构造Decimal对象,避免入参本身的二进制精度污染 return float(Decimal(str(x)) + Decimal(str(y)))
配套测试函数示例
def test_add(): # 整数测试用例 assert add(1, 2) == 3 assert add(-3, 7) == 4 assert add(0, 0) == 0 # 浮点数测试用例 assert add(0.1, 0.2) == 0.3 assert add(0.05, 0.05) == 0.1
内容的提问来源于stack exchange,提问作者ricklemypickle
相关产品推荐
相关产品推荐

