Google Apps Script自定义函数AMin1返回结果异常求助
修复Google Apps Script自定义函数AMin1的逻辑异常
问题根源
调用AMin1(499.2, 510, 300)时,按代码逻辑计算流程如下:
- 初始化
L1 = 499.2 + 20 = 519.2 L1 < 300不成立,跳过while循环519.2 > 510成立,执行L1 = 519.2 - 499.2——理论结果是20,但由于浮点数精度误差,实际计算结果可能是20.0000000000001或19.9999999999999这类近似值- 此时
L1 == 20的严格相等判断不成立,进入else分支返回L1的近似值(显示为20),不符合预期的字符串返回
修复后的代码
function AMin1(A, PD1, Min1) { let L1 = A + 20; while (L1 < Min1) { L1 += A; } if (L1 > PD1) { L1 -= A; } // 用精度范围判断浮点数是否接近20,规避精度误差 if (Math.abs(L1 - 20) < 0.0001) { return "Move to Higher Print Size"; } else { return L1; } }
修复说明
- 将严格相等判断
L1 == 20替换为基于精度阈值的范围判断,避免浮点数运算的精度误差导致条件不触发 - 简化变量初始化写法,提升代码可读性
内容的提问来源于stack exchange,提问作者Sensebe
相关产品推荐
相关产品推荐

