JavaScript调试挑战求助:修改指定行小数使测试全部通过
调试代码以满足三个测试用例要求
当前代码运行输出true、false、false,需修改第5、15、25、31行的十进制数字,使三个测试均输出true。
原代码如下:
import BigNumber from 'bignumber.js'; const denominationsMultiplier = { WEI: new BigNumber(1, 10).times(10).exponentiatedBy(18), GWEI: new BigNumber(1, 10).times(10).exponentiatedBy(8), ETH: new BigNumber(1, 10).times(10).exponentiatedBy(1), } function getFiatValueToRender({ value, conversionRate = 1, fromDenomination, fromCurrency, }) { let number = new BigNumber(value, 16); if (fromCurrency !== 'ETH') { number = number.multipliedBy(conversionRate); } if (fromDenomination !== 'WEI') { number = number.multipliedBy( denominationsMultiplier.WEI .dividedBy(denominationsMultiplier[fromDenomination]) ) } return number.toString(32); } function getResult(value) { return getFiatValueToRender({ value, conversionRate: 1, fromDenomination: 'GWEI', fromCurrency: 'ABC', }) } let x = 0 console.log(getResult(0) === '0') console.log(getResult(1) === '59682f00') console.log(getResult(10600.47) === 'e762bdf8a40')
调试修改点
第15行:输入值
0、1、10600.47都是十进制数,原代码用基数16解析会出错,将16改为10:let number = new BigNumber(value, 10);第5行:原WEI的计算结果为
10^19,不符合1 WEI与ETH的标准换算关系(1 ETH = 10^18 WEI),将exponentiatedBy(18)的18改为17,得到正确的10^18:WEI: new BigNumber(1, 10).times(10).exponentiatedBy(17),第25行:测试用例的预期结果是十六进制字符串,原代码返回base32字符串,将
32改为16:return number.toString(16);第31行:测试用例的预期结果对应输入值乘以1.5后的计算结果,将
1改为1.5:conversionRate: 1.5,
修改后验证
修改完成后三个测试用例的逻辑均匹配预期:
getResult(0):0经过所有计算后仍为0,转十六进制为'0',匹配预期。getResult(1):1×1.5=1.5,乘以WEI/GWEI=10^9得到1.5×10^9,转十六进制为'59682f00',匹配预期。getResult(10600.47):10600.47×1.5=15900.705,乘以10^9得到15900705000000,转十六进制为'e762bdf8a40',匹配预期。
内容的提问来源于stack exchange,提问作者feners
相关产品推荐
相关产品推荐

