JavaScript库函数toFixed用来将给定的数字四舍五入为指定的小数位数,W3school上有详细的介绍。众所周知,在处理小数位四舍五入的时候存在两种方式:一种是逢五进一,如5.885保留两位小数则是5.89;另一种是逢六进一,如5.885保留两位小数后仍然是5.88,5.886保留两位小数则是5.89。JavaScript的toFixed库函数没有提供专门的参数用来指示如何对给定的数字进行四舍五入,浏览器会按照默认的方式进行处理,如IE会按照逢五进一的方式对数字进行四舍五入,Chrome和Firefox则是按照逢六进一的方式。

  注意,JavaScript的Round函数不能被用来进行小数位四舍五入,按照W3school上的说明,该函数可把一个数字舍入为最接近的整数。

  另外,C#中有专门的枚举变量用来指示如何对数字进行四舍五入,http://msdn.microsoft.com/zh-cn/library/system.midpointrounding.aspx

  1. Math.Round(123.45, , MidpointRounding.AwayFromZero); // 返回123.5
  2. Math.Round(123.45, , MidpointRounding.ToEven); // 返回123.4
  3. Math.Round(123.45); // 返回123

  鉴于JavaScript的toFixed函数的不确定性,我们不得不自己编写方法来进行小数位数的四舍五入。下面的代码可以满足一般精度的运算。

  1. function toFixed( number, precision ) {
  2. var multiplier = Math.pow( 10, precision );
  3. return Math.round( number * multiplier ) / multiplier;
  4. }

  需要注意的是,JavaScript对高精度数学运算的支持并不是特别精准,如果你要处理的数字具有较高的精度,上面的方法返回的结果可能存在一定的误差,在使用的时候要小心。

  关键是被舍入的那一位数字是5如何进行取舍的问题!这里还存在一个正数和负数的问题,同一个数字,正数的情况和负数的情况计算出来的结果也不尽相同。所以,我们不得不对上面这个函数做进一步修改,当数字为负数时,先对其绝对值进行计算,然后再补充负号。

  1. function toFixed(number, precision) {
  2. var b = 1;
  3. if (isNaN(number)) return number;
  4. if (number < 0) b = -1;
  5. var multiplier = Math.pow(10, precision);
  6. return Math.round(Math.abs(number) * multiplier) / multiplier * b;
  7. }

  不太明白JavaScript中的数学运算函数为什么有这么多计算上的问题,是不是在设计之初有什么特殊的考虑呢?

JavaScript toFixed function Not Rouding的更多相关文章

  1. JavaScript笔记 Function

    在JavaScript中方法由两部分组成: 方法名和方法体. JavaScript中的方法跟其他传统面向对象语言不同,它跟普通的变量没有区别,唯一不同点是它是Function对象,因此它会有一些Fun ...

  2. (转)深入理解javascript的function

    原文:http://www.cnblogs.com/sharpxiajun/archive/2011/09/16/2179323.html javascript笔记:深入理解javascript的fu ...

  3. javascript的Function 和其 Arguments

    http://shengren-wang.iteye.com/blog/1343256 javascript的Function属性:1.Arguments对象2.caller 对调用单前函数的Func ...

  4. JavaScript之Function函数深入总结

    整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下 ...

  5. JavaScript Nested Function 的时空和身份属性

    JavaScript 的function 不仅仅是一等公民,简直就是特殊公民.它有许多独特的特征: 1) 它是object,可以存储,传递,附加属性. 2) 它可以有lexical closure, ...

  6. Javascript中Function,Object,Prototypes,__proto__等概念详解

    http://anykoro.sinaapp.com/2012/01/31/javascript%E4%B8%ADfunctionobjectprototypes__proto__%E7%AD%89% ...

  7. javascript 之Function对象的apply(),call(),bind(),方法和arguments,caller,length属性

    注:这篇文章原文:http://www.jb51.net/article/30883.htm 自己作为学习,重新写写. 一.写在前面的话 前端javascript编程还只是略懂皮毛,DOM知道一点,j ...

  8. 转载 javascript中(function($){...})(jQuery)写法是什么意思

    javascript中(function($){...})(jQuery)写法是什么意思   这里实际上是匿名函数function(arg){...}这就定义了一个匿名函数,参数为arg 而调用函数 ...

  9. JavaScript 之 function函数及参数arguments

    JavaScript用function关键字声明函数,可以用return返回值,也可以没有返回值. 建议:要么统一有返回值,要么统一都没有返回值,这样调试代码方便. 函数定义格式: function ...

随机推荐

  1. Linux(centos)系统各个目录的作用详解

    Linux(centos)系统各个目录的作用详解 文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码 ...

  2. hdu 2896 字典树解法

    #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...

  3. 使用C# WinForm制作 员工打卡项目 -- S2 2.3

    新建一个员工类,存储员工的信息 新建一个List<>集合,并在load事件中实例化三个员工对象 DataGridView绑定数据源,可以显示出数据 点击查询按钮,查询工号等同于输入的数的员 ...

  4. WCF三种通信模式

    WCF在通信过程中有三种模式:请求与答复.单向.双工通信. 请求与答复模式 描述:客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序 ...

  5. HttpURLConnection请求网络数据

    //使用线程 new Thread(){            public void run() {                try {                    //先创建出了一 ...

  6. 利用iframe无刷新上传文件的坑

    页面里经常要用到文件上传的功能,而且要求页面不刷新,先说一下原理:页面里放一个file控件和submit按钮,外面用form表单包住,给form表单加上对应的属性值,action.method.ent ...

  7. 在UTF8(linux)下,逆置汉字字符串

    #include <stdio.h> int main() { char c[]="我是如此热爱编程!"; ,min=,max; while(c[index]) { i ...

  8. [Shell]Bash变量:变量测试与内容替换

    --------------------------------------------------------------------------------------------- 变量测试是通 ...

  9. Jenkins 笔记

    1.Jenkins是什么? 他是一个开源的自动化服务器,持续集成工具.由Java和上百个插件组成,支持编译,测试,部署任意的自动化项目. 2.怎么安装Jenkins? 方法一:从官网 https:// ...

  10. ubuntu 挂载新硬盘

    http://www.cnblogs.com/hnrainll/archive/2012/02/27/2369331.html