简单来说js使用原生toFixed(x)截取小数的时候会有误差,出现在比如var o = 0.3303;o.toFixed(3);//0.330

toFixed(x)本来也是一个获取四舍五入的截取方法,但这个bug实在不能忍,所以还是用Math.round(x)比较稳定

toFixed(x)
在js中四舍五入的函数 tofixed(n) , n为要保留的小数位数。
n为0~20,当n超过20的时候,js会出错,这东西好像只能传一个数字进去,字符串会爆不是一个方法 var d=10.005;
d.toFixed(2);
//"10.01" bug var d=13.35;
d.toFixed(1); //13.3 Number(13.35).toFixed(1); //13.3 //what's the hell!
Number(0.055).toFixed(1); //0.1 //如果要修改这个缺陷,可以把js中的number类型的tofixed方法重写。 round 方法
返回与给出的数值表达式最接近的整数。 math.round(number)
必选项 number 参数是要舍入到最接近整数的值。 说明
如果 number 的小数部分大于等于 0.5,返回值是大于 number 的最小整数。
否则,round 返回小于等于 number 的最大整数。 其实我们可以用一种更加简洁的方法来解决这个问题:用Math.round方法来实现四舍五入。 比如,四舍五入一个数字并保留小数点后两位,我们可以这么干: Math.round(num * Math.pow(10, 2)) / Math.pow(10, 2); //num是待处理数字
当num = 10.10500时,计算上述表达式可得10.11。(正常) 当num = "10.50000"时(注意这里是字符串),计算上述表达式可得10.5。(damn it,小数点后位数不对!) ..... 当num是字符串,进行乘法操作时,进行了类型转换,后缀零被丢弃了,导致位数不足,这个时候我们就应该进行补零: (Math.round(num * Math.pow(10, 2)) / Math.pow(10, 2) + 0.001).toString().slice(0, -1) //加上一个小数点后多一位的数字0.001,再删除最后一个字符即可。
//slice(0, -1) 这个是截取一个对象或者数组的方法,表示取去除符合逻辑的其他对象,这里上下文是从转换成字符串之后的从0开始截取到倒数第一位的位置,就是把倒数第一位给干掉,因为手动加上了0.*1这个,所以要把多出来的那个1给干掉就刚好截取了 大概方法就是先剩10的n次方再除10的n次方,然后加上10的-(n+1)次方,转成字符串正好多了一位1,再用slice方法把这个1干掉,具体逻辑验证过了,可以直接用 综上,修正的toFixed计算表达式如下: (Math.round(num * Math.pow(10, fractionDigits)) / Math.pow(10, fractionDigits) + Math.pow(10, -(fractionDigits + 1))).toString().slice(0, -1)
最终得到的截取小数位数计算方法为 (Math.round(num*Math.pow(10,fractionDigits))/Math.pow(10,fractionDigits)+Math.pow(10,-(fractionDigits+1))).toString().slice(0, -1) 我的截取小数方法 var iTofixed =function(num,fractionDigits) { return (Math.round(num*Math.pow(10,fractionDigits))/Math.pow(10,fractionDigits)+Math.pow(10,-(fractionDigits+1))).toString().slice(0, -1) }; iTofixed('13.5000',3);
//"13.500"
 

js四舍五入的bug和方法的更多相关文章

  1. JS浮点数运算Bug

    JS浮点数运算Bug的解决办法(转) 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.0849999 ...

  2. 关于EasyUI 1.5版Datagrid组件在空数据时无法显示"空记录"提示的BUG解决方法

    问题:jQuery easyUI中Datagrid,在表格数据加载无数据的时候,如何显示"无记录"的提示语? 解决jQuery EasyUI 1.5.1版本的Datagrid,在处 ...

  3. js保留两位小数方法总结

    js保留两位小数方法总结 最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求.问题是,当用户离开文本框时,我需要将用 ...

  4. JS中的对象和方法简单剖析

    众所周知,在js中对象就是精髓,不理解对象就是不理解js. 那么什么事js中的对象呢? 在js中,几乎一切皆对象: Boolean ,String,Number可以是对象(或者说原生数据被认作对象): ...

  5. 解决JavaScript浮点数(小数) 运算出现Bug的方法

    解决JS浮点数(小数) 运算出现Bug的方法例如37.2 * 5.5 = 206.08 就直接用JS算了一个结果为: 204.60000000000002 怎么会这样, 两个只有一位小数的数字相乘, ...

  6. 常用的js、java编码解码方法

    前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...

  7. 如何使用 js 实现一个 Promise.all 方法 PromiseAll

    如何使用 js 实现一个 Promise.all 方法 PromiseAll Promise.all PromiseAll https://developer.mozilla.org/en-US/do ...

  8. JS中 call() 与apply 方法

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  9. 【转】js 关键字 in 的使用方法

    js 关键字 in 的使用方法  原文地址:http://sunct.iteye.com/blog/1709017   1.For...In 声明用于对数组或者对象的属性进行循环/迭代操作. 对于数组 ...

随机推荐

  1. word中MathType公式不能 二次编辑解决方案

    问题:当新建文档然后插入公式,此时可以利用mathtype进行编辑,保存后推出第二次打开,双击公式却发现不能编辑公式. 解决方案: ////////////////////////////////// ...

  2. 数据结构与算法分析——C语言描述

    P1.1 选择问题,选择出第K大的数,并画出N为不同值的运行时间,K=N/2 毕业两年半,重写排序,感觉良好.代码使用冒泡排序,库函数clock计算大致运行时间. // P1_1.cpp : Defi ...

  3. MFC图形处理

    关于MFC绘图功能入门 创建Dialog based MFC工程    打开Resource view 下的Dialog主界面 添加Picture control控件,为此控件添加CStatic的co ...

  4. UVa 11825 集合dp

    #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...

  5. Sublime Text 2/3如何支持中文GBK编码

    Sublime Text默认是只支持UTF8的编码,所以有些时候,当我们打开GBK文件时候,文件内会出先部分的乱码, 在菜单栏选择"Preferences"-->" ...

  6. java实现url转码、解码

    URL由来: 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址 “http://www.abc.com”,但是没有希腊字母的网址“htt ...

  7. [RxJS] What RxJS operators are

    We have covered the basics of what is Observable.create, and other creation functions. Now lets fina ...

  8. qt 学习之路 :QML 语法

    前面我们已经见识过 QML 文档.一个 QML 文档分为 import 和对象声明两部分.如果你要使用 Qt Quick,就需要 import QtQuick 2.QML 是一种声明语言,用于描述程序 ...

  9. Android(java)学习笔记204:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)

    1.有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高. ...

  10. Vim键盘图与命令图解