猿问

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

我试图添加两个十进制数字(参数可以是数字或字符串,它们在解析之前是数字)并将结果与数据进行比较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‬'));


神不在的星期二
浏览 319回答 2
2回答

潇潇雨雨

您可以创建一个函数来测试两个数字是否足够接近被称为相等,而不是来回转换为字符串。你决定一个小的三角洲,如果数字至少那么接近,你称之为好。function almost(a, b, delta = 0.000001){&nbsp; &nbsp; return Math.abs(a - b) < delta}// not really equalconsole.log("equal?", 0.2 + 0.1 === 0.3)// but good enoughconsole.log("close enough?", almost(0.2 + 0.1, 0.3))

蝴蝶刀刀

我运行你的代码几次,没有问题。我刚刚发现'0.3'你发布的内容,它有一个特殊的角色看起来像3但不是3。所以,当你想在JS上运行它时会显示错误。所以你的解决方案是正确的&nbsp;点击这里function&nbsp;calc(firstNumber,&nbsp;secondNumber,&nbsp;operation,&nbsp;resultInput)&nbsp;{ &nbsp;&nbsp;let&nbsp;a&nbsp;=&nbsp;parseFloat(firstNumber); &nbsp;&nbsp;let&nbsp;b&nbsp;=&nbsp;parseFloat(secondNumber); &nbsp;&nbsp;let&nbsp;aux&nbsp;=&nbsp;parseFloat(resultInput); &nbsp;&nbsp;let&nbsp;r; &nbsp;&nbsp;switch&nbsp;(operation)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'+': &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;a&nbsp;+&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'-': &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;a&nbsp;-&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'*': &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;a&nbsp;*&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'/': &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(b&nbsp;!==&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;a&nbsp;/&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;default: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(`Sorry,&nbsp;wrong&nbsp;operator:&nbsp;${operation}.`); &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;(+r.toFixed(1))&nbsp;===&nbsp;(+aux.toFixed(1));}console.log(calc('0.1',&nbsp;'0.2',&nbsp;'+',&nbsp;'0.3'));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答