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

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

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

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

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

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

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

  不太明白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. iOS模拟器设置输入中文

    1.打开模拟器,选择Settings; 2.选择General  ->KeyBoard ->KeyBoards,选择中文输入法Chinese(Simplified)即可 以前尝试试了很多方 ...

  2. libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)

    log报错如下: Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated w ...

  3. OneNote的配置

    -------siwuxie095 1.点击 "文件" 2.点击 "发送"->"发送至博客" 3.配置博客园的连接 (1)选择博客提供 ...

  4. SpringMVC在传递date型数据时的配置

    查阅了好多资料, 最后才发现原来只是添加一个方法就能解决的问题, 但是看了半天又没看明白, 只是知道这么写就能成功, 先记下来, 以后再研究吧, 在配置好springMVC的时候, 可以在前台的for ...

  5. vim编辑格式与环境设置

    set wildmenu set backspace= set pastetoggle=<f3> filetype on filetype plugin on filetype inden ...

  6. Python基础学习笔记FromImooc.com

    1.list L = ['a','a','a','a','a','a3'] L[0] = a L[-1] = a3   添加新元素 L.append('paul') L.insert(-1,'Paul ...

  7. ORA-01653:表空间扩展失败的问题以及增加表空间

    一.脚本修改方式: ----查询表空间使用情况---使用DBA权限登陆SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB ...

  8. 【Java】XML解析之SAX

    SAX介绍 SAX(Simple API for XML)是一种事件驱动的流式XML文件处理方式,区别与DOM方式的是不需要在内存中建一棵DOM树,而是根据读取XML时遇到的标签事件来顺序处理,因此具 ...

  9. GridView CheckBox 全选

    GridView CheckBox 全选 <script type="text/javascript"> $(function () { $("#allChe ...

  10. 有关eclipse连接SQL Server 2008的问题

    1.首先,提供一个链接http://blog.163.com/jackie_howe/blog/static/19949134720122261121214/ 这个链接有详细更改SQL Server ...