惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 水手paul2008

MySQL 数据库归档日志相关 SQL Server 数据库给第三方用户开权限,限制可见内容。 visual svn server 迁移 windbg preview调试winform程序卡死 .net List.ForEach内部Async/Await 异步的问题 asp.net core 大并发设置 SQLServer数据库优化 windbg 调试 winform程序(二车间机台程序) IIS日志分析工具 .Net的三个Timer内Interval是不精确的 IE 碰到<不能执行已释放 Script 的代码> IIS应用程序池设置若干 关于thinkpad t440s的声卡失真问题,竟然带来对旧电脑的惊喜 ArcMap10.4 遇到严重的应用程序错误,无法继续 给汽车换牌照灯的故事 .Net 混淆器ConfuserEx 车辆年检、强险、车船税的关系 .Net下几种ORM Windows 刷新图标命令
JavaScript的数字运算不准的问题
水手paul2008 · 2023-10-17 · via 博客园 - 水手paul2008

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);默认就是银行家算法,如果需要四舍五入,需要第三个参数设置AwayFromZero:Math.Round(1.005, 2,MidpointRounding.AwayFromZero);

但你如果运行此语句,结果为何仍旧是1,而不是1.01?因为.net对常量小数默认为转换为double型,double型是不精确的,如需要得到正确的1.01,需要Round的另一decimal重载Math.Round((decimal)1.005, 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;
}