首页 > 编程语言 >JavaScript的数字运算不准的问题

JavaScript的数字运算不准的问题

时间:2023-10-17 17:12:49浏览次数:28  
标签:四舍五入 不准 console 运算 toFixed2 JavaScript toFixed math log

JavaScript的运算问题存在两方面:

第一个表示不准问题:

打开浏览器按F12,在Console里,

输入0.1+0.2=0.30000000000000004

输入91.25*0.7 =63.87499999999999 

解决这个问题,要用第三方库math.js 或 decimal.js 

const math = require('mathjs');
console.log(math.add(0.1, 0.2));

 

第二个问题toFixed是银行家舍入,如果要求四舍五入,那需要另写方法。

银行家舍入是“四舍六入五进偶”(四舍六入五取偶)(四舍六入五成双)。例如

0.15.toFixed(1)=0.1; //5前一位是奇数1,“舍”,

0.25.toFixed(1)=0.3; //5前一位是偶数2,才会“入”,

其实浏览器toFixed不知什么算法,很乱。

.Net算法准 Math.Round(5.665, -2);默认就是银行家算法,如果需要四舍五入Math.Round(5.665, -2,MidpointRounding.AwayFromZero);

以下给出js的四舍五入算法,toFixed2

/* 
* Number.toFiexed默认是四舍六入五进偶,而有些地方需要四舍五入。
* console.log(64.925.toFixed(2),64.935.toFixed(2)); 默认:64.92 64.94. 
* console.log(math.toFixed2(64.925,2),math.toFixed2(64.935,2)); 期待:64.93 64.94. 
*/
export function toFixed2(num, n) {
  //console.log('toFixed2')
  var rounded = math.round(num, n);
  var result = rounded.toString();
  if (n <= 0)
    return result;

  var idx = result.indexOf('.');
  if (idx < 0) {
    idx = result.length;
    result += '.';
  }
  while (result.length <= idx + n) {
    result += '0';
  }
  return result;
}

 

标签:四舍五入,不准,console,运算,toFixed2,JavaScript,toFixed,math,log
From: https://www.cnblogs.com/wigis/p/17770159.html

相关文章

  • iframe实现与父页面跨域隔离的JavaScript 代码沙箱
    这篇文章主要介绍了使用iframe实现与父页面跨域隔离的JavaScript代码沙箱,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪目录正文1.iframe2.dataURL3.将JavaScript代码变成dataURL4.如果需要获取执行结果的话,基于postMessage定制通信机制正文假......
  • JavaScript中高阶函数的巧妙运用
    JavaScript中的高阶函数是指可以接受其他函数作为参数或者返回一个函数作为结果的函数,本文介绍了JS中一些高阶函数的妙用,希望对大家有所帮助目录1.接受函数作为参数的高阶函数2.返回函数的高阶函数3.同时接受和返回函数的高阶函数JavaScript中的高阶函数是指可以接受其他函数作为参......
  • 请在课上练习的基础上,实现输出加减法混合的运算题目列表。请提交代码及运行效果截图。
    importjava.util.Random;publicclassMathOperationGenerator{  publicstaticvoidmain(String[]args){    intnumberOfQuestions=10;//指定生成题目的数量    generateMathQuestions(numberOfQuestions);  }  publicstaticvoidgenerateMat......
  • 了解AD620A运算放大器的原理、应用和性能特点 | 百能云芯
    在电子领域,AD620A是一种广泛应用的运算放大器,也被称为运放。它在信号放大、传感器接口和测量应用中扮演着重要的角色。接下来云芯将带您深入探讨AD620A运放的原理、应用领域以及性能特点,以帮助您更好地理解它的作用和价值。AD620A是一种精密差分放大器,它的工作原理基于运放......
  • How to export objects to a csv file using pure JavaScript All In One
    HowtoexportobjectstoaCSVfileusingpureJavaScriptAllInOne如何使用纯JavaScript将对象导出到CSV文件CSVCSV使用,/逗号分隔CSVfileseparatorCSV文件分隔符Comma-separatedvalues(CSV)Comma-separatedvalues,afileformatandextension......
  • JavaScript百炼成仙之前言
    JavaScript是一种轻量级的动态编程语言,在诞生之时,JavaScript并没有受到人们的过多关注,但是谁也想不到,在大前端快速风靡的今天,JavaScript已经成为当今编程世界中优雅而不可或缺的一员。如果你是一名编程初学者,刚刚学习完HTML和CSS,那你就不得不接触JavaScript了。刚开始,你会用jQuery......
  • select 里列运算 求年薪
    表的列是支持运算符的 起别名时需要加单引号 #获取年薪descemp;selectENAME,SAL*12as'年薪'fromemp; ......
  • Javascript报错:Uncaught TypeError: $(...).slide is not a function
    检查网站的时候,发现网页出现一个报错,UncaughtTypeError:$(...).slideisnotafunction同时,平时没有问题的轮播图,也不轮播了。检查并解决步骤如下: 1.顺着错误提示点过去,发现就是slide函数无法运行。查看相关介绍,表示是jq文件进行了重复引用,且版本不同 如下图相关资料描......
  • 今日学习:位运算&中国剩余定理
    -2^31的补码是-0.也就是10000000000000000000000000000000补码是原码取反加1x&(-x)是最低位为1的位为1,其余位为0. 中国剩余定理: m1,m2,.....,mn相互互质。x=a1(modm1)x=a2(modm2)...x=an(modmn)那么解为:记M=m1*m2*...*mn;  Mi=m1*m2....*mn/mi  ......
  • 2D物理引擎 Box2D for javascript Games 第四章 将力作用到刚体上
    2D物理引擎Box2DforjavascriptGames第四章将力作用到刚体上将力作用到刚体上Box2D是一个在力作用下的世界,它可以将力作用于刚体上,从而给我们一个更加真实的模拟。但是,如果你想要移动刚体,发射子弹,抛掷小鸟,驾驶汽车和当你在玩物理游戏时你看到的一切令人起劲的事情,那么你......