JavaScript出租车费计算函数求助:测试用例未通过排查
出租车费计算函数错误排查
需求回顾
Northdrivers Taxi Company™️ 定价规则:
- 时长≤3分钟:基础费用500便士(5英镑)
- 超过3分钟部分:每分钟额外收取70便士
- 行程时长需向上取整为整数分钟
用户提交的代码
function calculateTaxiFare(seconds) { // Your code goes here... const flatFare = 500 const minutes = Math.ceil(seconds / 60) console.log(minutes) if(minutes<=3){ return(flatFare) } if(minutes>3){ let newMin = minutes-3; return (flatFare + (newMin * 70)) } }
遇到的错误
传入非整分钟数时返回总费用
✕ AssertionError: expected 920 to equal 990
传入非整分钟数时返回总费用。时长必须始终向上取整
✕ AssertionError: expected 500 to equal 570
问题分析与修正
从错误信息可以看出,代码核心问题是向上取整逻辑未正确执行,导致非整分钟数的时长被低估,进而少算额外费用:
- 传入181秒(3分1秒)时,正确向上取整应为4分钟,费用应为570便士,但代码返回500便士,说明计算出的
minutes为3而非4。 - 传入541秒(9分1秒)时,正确向上取整应为10分钟,费用应为990便士,但代码返回920便士,说明计算出的
minutes为9而非10。
可能的错误原因
- 误将
Math.ceil写成Math.floor或Math.round,导致无法正确向上取整。 - 使用了整数除法
seconds // 60后再套Math.ceil,先丢失小数部分导致ceil失效。
修正后的代码
确保正确使用Math.ceil(seconds / 60)实现向上取整:
function calculateTaxiFare(seconds) { const flatFare = 500; const minutes = Math.ceil(seconds / 60); if (minutes <= 3) { return flatFare; } else { const extraMinutes = minutes - 3; return flatFare + extraMinutes * 70; } }
验证用例
- 输入
181:Math.ceil(181/60)=4,返回500 + 70 = 570,符合预期。 - 输入
541:Math.ceil(541/60)=10,返回500 + 7*70 = 990,符合预期。
内容的提问来源于stack exchange,提问作者Mahmud
相关产品推荐
相关产品推荐

