1. var a = 2.255;
  2. var b = a.toFixed(2);
  3. console.log(b);

以上代码,按预期正常四舍五入得到结果应该是2.26,但实际返回值为2.25

js浮点数精度作为前端必踩坑,谁也逃不过,不过我们可以改写原型上的方法达到目的

  1. Number.prototype.toFixed = function (n) {
  2. if (n > 20 || n < 0) {
  3. throw new RangeError('toFixed() digits argument must be between 0 and 20');
  4. }
  5. const number = this;
  6. if (isNaN(number) || number >= Math.pow(10, 21)) {
  7. return number.toString();
  8. }
  9. if (typeof (n) == 'undefined' || n == 0) {
  10. return (Math.round(number)).toString();
  11. }
  12.  
  13. let result = number.toString();
  14. const arr = result.split('.');
  15.  
  16. // 整数的情况
  17. if (arr.length < 2) {
  18. result += '.';
  19. for (let i = 0; i < n; i += 1) {
  20. result += '0';
  21. }
  22. return result;
  23. }
  24.  
  25. const integer = arr[0];
  26. const decimal = arr[1];
  27. if (decimal.length == n) {
  28. return result;
  29. }
  30. if (decimal.length < n) {
  31. for (let i = 0; i < n - decimal.length; i += 1) {
  32. result += '0';
  33. }
  34. return result;
  35. }
  36. result = integer + '.' + decimal.substr(0, n);
  37. const last = decimal.substr(n, 1);
  38.  
  39. // 四舍五入,转换为整数再处理,避免浮点数精度的损失
  40. if (parseInt(last, 10) >= 5) {
  41. const x = Math.pow(10, n);
  42. result = (Math.round((parseFloat(result) * x)) + 1) / x;
  43. result = result.toFixed(n);
  44. }
  45.  
  46. return result;
  47. };

原文请转 http://www.jianshu.com/p/849b0ae36b36

toFixed四舍五入精度校正的更多相关文章

  1. [Python]round四舍五入精度缺失的解决

    环境: os: win7 64bit python:2.7.5  32bit 对python四舍五入的解决方案 现象: 一般的四舍五入操作都是使用内置的round方法   In [14]: round ...

  2. js toFixed() 四舍五入后并不是你期望的结果

    小学的时候学数学就知道有一种叫四舍五入的计算方式,就是对于小数位数的取舍,逢五进一,比如1.225 取两位小数后就是1.23.在前端开发中自己也少不了这样的计算,js也提供了相关的方法--toFixe ...

  3. c# 关于取小数点后值四舍五入精度问题

    ---恢复内容开始--- 最近做一个校验码验证法算法的生成程序,涉及到取小数点后值的问题;对其中遇到的问题做一下总结: 1:ToString()转换时碰到0.9999999999999之类的数据,给自 ...

  4. 微信小程序开发之保留小数(toFixed) 四舍五入 获取整数 string转int

    https://blog.csdn.net/qq_31383345/article/details/52961767

  5. JS013. 重写toFixed( )方法,toFixed()原理 - 四舍五入?银行家舍入法?No!六舍七允许四舍五入√!

    以下为场景实测与原理分析,需要重写函数请直接滚动至页尾!!! 语法 - Number.prototype.toFixed( ) // toFixed()方法 使用定点表示法来格式化一个数值. numO ...

  6. js中精度问题以及解决方案

    js中的数字按照IEEE 754的标准,使用64位双精度浮点型来表示.其中符号位S,指数位E,尾数位M分别占了1,11,52位,并且在ES5规范中指出了指数位E的取值范围是[-1074, 971]. ...

  7. 关于浏览器Number.toFixed的错误修复

    问题描述如下: var n = 1.255; var fixed = n.toFixed(2); console.log(fixed);//结果:1.25 /* 以上代码运行预期的结果是1.26,但是 ...

  8. JavaScript 中精度问题以及解决方案

    JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示.其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在 ES5 规范 中指出了指数位E ...

  9. 解决javascript加减乘除及toFixed的误差问题

    //用于替换原有的toFixed,解决精度误差问题 Number.prototype.myToFixed=function(s){ if(s == null){s = 0;} var value = ...

随机推荐

  1. 易错java知识点总结(持续更新)

    1. 2.java转义字符的理解 参考知乎大神:http://www.zhihu.com/question/29232624 正向和逆向处理转义字符 正向:把两个字符 \ n 识别为一个转义字符 ne ...

  2. [EWS]查找 文件夹

    摘要 有时在操作exchange的时候,需要查找用户exchange文件夹,比如用户新建了一些文件夹. 一个例子 这里以查找用户outlook邮箱中的历史对话文件夹为例. private const ...

  3. POJ2195&&HDU1533(KB11-D 最小费用最大流)

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23515   Accepted: 11853 Desc ...

  4. POJ1284(SummerTrainingDay04-K 原根)

    Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4505   Accepted: 2652 D ...

  5. django-全文检索

    全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理 需要的第三方库: haystack:django的一个包,可以方便地对model里面的内容进行索引.搜索,设计为 ...

  6. python 生成器 和生成器函数 以及各种推导式

    一.生成器    本质就是迭代器. 我们可以直接执⾏__next__()来执⾏ 以下⽣成器 一个一个的创建对象 创建生成器的方式: 1.生成器函数 2.通过生成器 表达式来获取生成器 3.类型转换(看 ...

  7. Geolocation API

    Geolocation API--地理定位 navigator.geolocation getCurrentPosition() 触发请求用户共享地理定位信息的对话框 接收3个参数: 1.成功回调函数 ...

  8. CSS-网站导航栏标题之间的分隔符

    在一个网页上,尤其是导航栏文字与文字之间,大多数情况下都会有分隔符,也就是文字之间的一个小竖线,这个小小的分隔符,每个网站都有不同的样式,常用的写法就是用标签的边框,这个写法也比较简单,用起来也方便, ...

  9. js 从URL上获取参数

    //获取匹配的        function getUrlParam(name) {             var reg = new RegExp("(^|&)" + ...

  10. php 去除所有空格 包括中文空格圆角空格

    有的中文的半角,圆角空格或者段落符显示为空白的.可以用正则来处理 preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/","" ...