JavaScript toFixed function Not Rouding
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的更多相关文章
- JavaScript笔记 Function
在JavaScript中方法由两部分组成: 方法名和方法体. JavaScript中的方法跟其他传统面向对象语言不同,它跟普通的变量没有区别,唯一不同点是它是Function对象,因此它会有一些Fun ...
- (转)深入理解javascript的function
原文:http://www.cnblogs.com/sharpxiajun/archive/2011/09/16/2179323.html javascript笔记:深入理解javascript的fu ...
- javascript的Function 和其 Arguments
http://shengren-wang.iteye.com/blog/1343256 javascript的Function属性:1.Arguments对象2.caller 对调用单前函数的Func ...
- JavaScript之Function函数深入总结
整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下 ...
- JavaScript Nested Function 的时空和身份属性
JavaScript 的function 不仅仅是一等公民,简直就是特殊公民.它有许多独特的特征: 1) 它是object,可以存储,传递,附加属性. 2) 它可以有lexical closure, ...
- Javascript中Function,Object,Prototypes,__proto__等概念详解
http://anykoro.sinaapp.com/2012/01/31/javascript%E4%B8%ADfunctionobjectprototypes__proto__%E7%AD%89% ...
- javascript 之Function对象的apply(),call(),bind(),方法和arguments,caller,length属性
注:这篇文章原文:http://www.jb51.net/article/30883.htm 自己作为学习,重新写写. 一.写在前面的话 前端javascript编程还只是略懂皮毛,DOM知道一点,j ...
- 转载 javascript中(function($){...})(jQuery)写法是什么意思
javascript中(function($){...})(jQuery)写法是什么意思 这里实际上是匿名函数function(arg){...}这就定义了一个匿名函数,参数为arg 而调用函数 ...
- JavaScript 之 function函数及参数arguments
JavaScript用function关键字声明函数,可以用return返回值,也可以没有返回值. 建议:要么统一有返回值,要么统一都没有返回值,这样调试代码方便. 函数定义格式: function ...
随机推荐
- 解决IE中window.open打开链接refer丢失的问题
来源: http://www.coderanch.com/t/114767/HTML-CSS-JavaScript/nClick-window-open-loses-referrerHello,I h ...
- 测试table数据 winfrom datagridview 点击标头数字排序的时候table 列类型要为数字类型
public DataTable GenerateData(int NoOfRecord){DataTable tbl = new DataTable();tbl.Columns.Add(new Da ...
- Swift3.0基础语法学习<五>
异常处理: // // ViewController5.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/16. // Copyright © ...
- SQL Server AlwaysOn架构及原理
SQL Server AlwaysOn架构及原理 SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例 ...
- Tornado 异步客户端
前言 Tornado是很优秀的非阻塞式服务器,我们一般用它来写Web 服务器,据说知乎就是用Tornado写的. 如果对tornado源码不是很了解,可以先看一下另一篇文章: http://yunji ...
- ZT 理解 Android 上的安全性
理解 Android 上的安全性 http://www.ibm.com/developerworks/cn/xml/x-androidsecurity/ 利用沙箱.应用程序签名和权限增强应用程序安全性 ...
- No module named yum错误的解决办法
今天用yum安装软件的时候出现如下错误: There was a problem importing one of the Python modules required to run yum. Th ...
- php中or的含义
or其实是Php中的短路或 经常看到这样的语句: $file = fopen($filename, r) or die("抱歉,无法打开: $filename"); or在这里是这 ...
- window 2003 配置FTP +防火墙设置
2保险的做法是 不允许匿名登录,吧钩去掉 后面我们会添加一个用户,并且赋予权限 3 主目录 可以设置时当前计算机目录或者是另一台计算机目录(映射) FTP站点目录:浏览定位FTP文件所在站点,给予是否 ...
- xtrabackup工具
xtrabackup是基于InnoDB存储引擎灾难恢复的.它复制InnoDB的数据文件,尽管数据文件在内部是非一致性的,但在执行灾难恢复时可以保证这些数据文件是一致的,并且可用. 官方原理 在Inno ...