You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现可满足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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:36:04