JS toFixed()方法精度丢失解决方法
JS toFixed()方法精度丢失
toFixed()方法可把Number四舍五入为指定小数位数的数字。但这个方法并不完全遵从四舍五入的规则,如
2.485.toFixed(2) //=>2.48
网上流行的说法是遵循银行家舍入法,即:四舍六入五成双。四舍六入字面意思,5的话看后面不为零就进一,如果为零看5前面的数是奇数还是偶数,奇数进一偶数舍弃。但经过实际测试发现也不完全遵从这个规则(chrome下),如
2.485.toFixed(2) //=>2.48
1.485.toFixed(2) //=>1.49
解决方法,在main入口(如App.vue),重写toFixed方法,分几种情况来处理
Number.prototype.toFixed = function (n) {
if (n > 20 || n < 0) { //精度允许0-20
throw new RangeError('toFixed() digits argument must be between 0 and 20');
}
const number = this;
if (isNaN(number) || number >= Math.pow(10, 21)) {
return number.toString();
}
if (typeof (n) == 'undefined' || n == 0) {
return (Math.round(number)).toString();
}
//判断是否为负数
var isMinus = number > 0 ? false : true;
let result = number.toString();
const arr = result.split('.');
// 整数的情况
if (arr.length < 2) {
result += '.';
for (let i = 0; i < n; i += 1) {
result += '0';
}
return result;
}
const integer = arr[0];
const decimal = arr[1];
//小数位数和精确位数相等时
if (decimal.length == n) {
return result;
}
//小数位数小于精确位数时
if (decimal.length < n) {
for (let i = 0; i < n - decimal.length; i += 1) {
result += '0';
}
return result;
}
result = integer + '.' + decimal.substr(0, n);
const last = decimal.substr(n, 1);
// 四舍五入,转换为整数再处理,避免浮点数精度的损失
if (parseInt(last, 10) >= 5) {
const x = Math.pow(10, n);
// 对于过精度位的下一位值大于5时,正数+1 负数-1.
// 正数例如6.257 转化为两位精度的小数是 6.26。
// 负数例如-6.258 转化为两位精度的小数是 -6.26。
result = (Math.round((parseFloat(result) * x)) + (isMinus ? -1 : 1)) / x;
result = result.toFixed(n);
}
return result;
};
JS toFixed()方法精度丢失解决方法的更多相关文章
- ASP.NET Web Service中使用Session 及 Session丢失解决方法 续
原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...
- JS 无法清除Cookie的解决方法
JS 无法清除Cookie的解决方法 项目中使用sdmenu.js时,需要在登录时清除Cookie,而sdmenu默认是会保存Cookie的 下面是sdmenu.js保存Cookie的方法 doc ...
- Hibernate的懒加载session丢失解决方法
在web.xml加入spring提供的过滤器,延长session的生命周期 <!--Hibernate的懒加载session丢失解决方法 --> <filter> <fi ...
- Android 非Activity类引用getResources()方法问题的解决方法
在进行Android开发的过程中,在一个非Activity类(此处假设类名为MyNewClass)中引用了getResources()方法,如下: Bitmap bmp = BitmapFactory ...
- IE8下部分方法失效的解决方法
1.IE8下String的Trim()方法失效的解决方法 用jquery的trim()方法,$.trim(str)就可以了: 例:_id.trim() !='' 改为 $.trim(_id) != ...
- 移动端前端笔记 — 遇到的常见JS与CSS问题及解决方法 ( 摘自zdwzdwzdw)
笔者接触移动前端快一年了,特将平时的一些笔记整理出来,希望能够给需要的人一些小小的帮助.同时也由于笔者的水平有限,虽说都是笔者遇到过使用过的,但文中可能也会出现一些问题或不严谨的地方,望各位指出,不胜 ...
- Ajax异步获取html数据中包含js方法无效的解决方法
页面上使用js写了一个获取后台数据的方法 function data() { var tab = $("#dic") $.ajax({ url: '../demo.ashx?met ...
- php 页面调转导致session丢失解决方法
例如在a页面设置了会话,然后打印会话值,可以成功打印,但是调转到b页面后,会话丢失了. 原因有不少,一个原因就是没有在页面开头加入session_start();当然你也可以直接配置php.ini文件 ...
- 移动端遇到的常见JS与CSS问题及解决方法
由于笔者的水平有限,虽说都是笔者遇到过使用过的,但文中可能也会出现一些问题或不严谨的地方,望各位指出,不胜感激! 一. css部分 body如果设置height:100%;overflow:hidde ...
- vite2 打包的时候vendor-xxx.js文件过大的解决方法
vite2是一个非常好用的工具,只是随着代码的增多,打包的时候 vendor-xxxxxx.js 文件也越来越大,这就郁闷了. 打包时遇到警告 输出文件名字/static/vendor.9b5698e ...
随机推荐
- Angular与AngularJS区别
简单介绍 目前 Angular 2 到現在 Angular 11 都是十分穩定的改版,不再出現之前 Angular 1.x 到 Angular 2.x 的哀鴻遍野. 因此目前市面上確實同時存在著兩種差 ...
- enumerate()使用方法
enumerate()(单词意思是枚举的意思)是python中的内置函数, enumerate(X,[start=0]) 函数中的参数X可以是一个迭代器(iterator)或者是一个序列, start ...
- linux vim 无权限保存解决办法
通常在vim编辑文件时往往会忘记文件权限问题, 在wq保存时发现权限不足,这时候输入以下命令解决: w! sudo tee % 命令解析: w! {cmd} 指示 保存时执行额外命令: tee 用于将 ...
- 知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Docker 安装 知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装 https:// ...
- vite 找不到依赖模块:[plugin:vite:dep-pre-bundle]
问题描述: 运行项目时,出现[plugin:vite:dep-pre-bundle] 错误.这种问题一般为依赖的包未正常配置相关字段,导致vite无法找到包的入口. 遇到这种模块内.找不到引用模块的, ...
- LabVIEW图形化TensoRT工具包的安装下载分享
前言 Hello,大家好,我是virobotics(仪酷智能)今天我们一起来看一下如何安装[LabVIEWTensoRT工具包]. 一.LabVIEW图形化TensoRT工具包简介 工具包特点: 图形 ...
- 【pytorch】目标检测:YOLO的基本原理与YOLO系列的网络结构
利用深度学习进行目标检测的算法可分为两类:two-stage和one-stage.two-stage类的算法,是基于Region Proposal的,它包括R-CNN,Fast R-CNN, Fast ...
- 【Hexo】插件推荐以及使用小技巧
目录 插件推荐 hexo-deployer-git hexo-word-counter hexo-abbrlink hexo-generator-sitemap 小技巧 自定义提交信息 参考资料 He ...
- SQL技巧:WITH RECURSIVE递归运算
SQL技巧:WITH RECURSIVE递归运算 1.累加求和运算 -- 计算递归 WITH RECURSIVE t(n) AS ( VALUES (1) UNION ALL SE ...
- [译]2023年 Web Coponent 现状
本文为翻译 原文地址:2023 State of Web Components: Today's standards and a glimpse into the future. 最近,我写了关于如何 ...