为了账号安全,请及时绑定邮箱和手机立即绑定

在JavaScript中添加和比较两个十进制数

在JavaScript中添加和比较两个十进制数

神不在的星期二 2019-04-24 18:15:27
我试图添加两个十进制数字(参数可以是数字或字符串,它们在解析之前是数字)并将结果与数据进行比较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))


查看完整回答
反对 回复 2019-05-17
?
蝴蝶刀刀

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'));


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 318 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信