我试图添加两个十进制数字(参数可以是数字或字符串,它们在解析之前是数字)并将结果与数据进行比较resultInput。问题是系统无法准确表示浮点数。例如,0.1 + 0.2 = 0.30000000000000004。所以,我试图使用toFixed()方法来使用定点表示法格式化数字。我在false运行代码时得到了。不知道我哪里弄错了。如果您有任何想法,请告诉我。function calc(firstNumber, secondNumber, operation, resultInput) { let a = parseFloat(firstNumber); //Number() let b = parseFloat(secondNumber); //Number() let c; let d = parseFloat(resultInput); console.log(JSON.stringify(`value of d : ${d}`)); //"value of d : NaN" switch (operation) { case '+': c = a + b; break; case '-': c = a - b; break; case '*': c = a * b; break; case '/': if (b !== 0) { c = a / b; } else { c = 0; } break; default: console.log(`Sorry, wrong operator: ${operation}.`); } console.log(JSON.stringify(`value of c: ${c}`)); // "value of c: 0.30000000000000004" let f = +c.toFixed(1); let e = +d.toFixed(1); console.log(JSON.stringify(`value of f: ${f}`)); // "value of f: 0.3" console.log(typeof f); //number console.log(JSON.stringify(`value of d: ${d}`)); // "value of d: NaN" console.log(typeof d); //number console.log(JSON.stringify(`value of e: ${e}`)); // "value of e: NaN" console.log(typeof e); //number if (f !== e) return false; // if (!Object.is(f, e)) return false; return true; } console.log(calc('0.1', '0.2', '+', '0.3'));
2 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
您可以创建一个函数来测试两个数字是否足够接近被称为相等,而不是来回转换为字符串。你决定一个小的三角洲,如果数字至少那么接近,你称之为好。
function almost(a, b, delta = 0.000001){
return Math.abs(a - b) < delta
}
// not really equal
console.log("equal?", 0.2 + 0.1 === 0.3)
// but good enough
console.log("close enough?", almost(0.2 + 0.1, 0.3))
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
我运行你的代码几次,没有问题。我刚刚发现'0.3'
你发布的内容,它有一个特殊的角色看起来像3
但不是3
。所以,当你想在JS上运行它时会显示错误。所以你的解决方案是正确的 点击这里
function calc(firstNumber, secondNumber, operation, resultInput) { let a = parseFloat(firstNumber); let b = parseFloat(secondNumber); let aux = parseFloat(resultInput); let r; switch (operation) { case '+': r = a + b; break; case '-': r = a - b; break; case '*': r = a * b; break; case '/': if (b !== 0) { r = a / b; } else { r = 0; } break; default: console.log(`Sorry, wrong operator: ${operation}.`); } return (+r.toFixed(1)) === (+aux.toFixed(1));}console.log(calc('0.1', '0.2', '+', '0.3'));
添加回答
举报
0/150
提交
取消