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 ...
随机推荐
- Linux内核分析第四周学习总结:扒开系统调用的三层皮(上)
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核 ...
- IOS-Appium 自动化测试——环境配置及模拟器、真机跑测试
在MAC环境下配置IOS的appium的自动化测试环境,主要包含三个部分: 一.环境配置 1.安装homebrew(homebrew可以提供MAC OS无法提供的很多套件) ruby -e " ...
- VS调试在Win7(vista系列)操作系统下 HttpListener拒绝访问解决办法
一. VS调试在Win7(vista系列)操作系统下 HttpListener无法绑定多个 指定IP.端口问题 来自:http://www.cnblogs.com/ryhan/p/4195693.ht ...
- OutSystems学习一,安装以及入门
官方网站:http://www.outsystems.com/home/HomePage.aspx 安装完成后,在官网申请自己的管理云平台 启动客户端 详细参考帮助,跟着走就行
- 第二章 DateTime工具类
项目中经常需要将DateTime转化成各种格式的String类型,或将各种类型的String转为DateTime类型. 本文提供一个DateTime与String的转换工具类: import org. ...
- [C#-SQLite] SQLite一些奇怪的问题
今天整C#的DAO层,我用的2013, 用的4.0的.NetFramework刚刚创建完Helper就出现异常 + Connection "helper.Connecti ...
- upgrade-php-5-1-to-php-5-3-using-yum-on-centos
wget -q -O - http://www.atomicorp.com/installers/atomic | shyum upgrade phpyum -y remove atomic-rele ...
- SQL基础分类
我们可以把学习过的sql语言,进行分类: 1. DDL : 数据定义语言 a) 操作库表结构的语言. Create drop alter 2. DML : 数据操作语言 a) 操作数据的语言: upd ...
- ubuntu工具积累
1.sudo apt-get install terminator一款可以切分终端窗口的工具 a.在系统>键盘>快捷键修该ctrl+alt+t快捷应用为terminator,其他的快捷键同 ...
- 数据库 sql
近期项目中会用到oracle,mysql,两者的建表sql 类型,函数都会混淆.现在特意整理一下: mysql :now(), CONCAT("","",& ...