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 ...
随机推荐
- Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "124.202.213.70" failed: [10054] Connection reset by peer [MsgId: MERR-27780]
解决方案一: 备注: 此方案如果请求响应时间太长,勾选"WinInet replay instead of Sockets(Windows only)"将会导致如下错误:
- PHP基本问题
WampServer修改端口及菜单Localhost http://www.wuwenhui.cn/3047.html WAMPServer默认配置更改-web根目录 http://blog.csdn ...
- MYSQL服务器字符集设置
修改默认字符集 vi /etc/my.cnf 在[mysqld]下面加入default-character-set=utf8 在[client]下面加入default-character-set=ut ...
- 2015年毕业生收到的offer和薪资透露
个人情况:全国排名70多的大学,非211,计算机专业硕士 收到的offer: 苏州同程旅游--6k/月 ,自己要了这么多,就给了这么多,没有规范.苏州蜗牛科技--8k/月 ,给了个口头offer,要去 ...
- Google上的Cookie Matching
Cookie Matching This guide explains how the Cookie Matching Service enables you to make more effecti ...
- [Shell]条件判断与流程控制:if, case, for, while, until
---------------------------------------------------------------------------------------------------- ...
- 【JSP】自定义标签开发入门
JSP 自定义标签 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时We ...
- Linux -- Centos 下配置LNAMP 服务器环境
1.Mysql centos 7 下mysql被替换掉,如有需要请看另一篇: centos 6.5下: yum install mysql mysql-server mysql-devel 启动mys ...
- Redis在CentOS6.4中的安装
首先,介绍一下Redis数据库.Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的读写需求. 1)redis的键只能是字符串: 2)redis的值支持多种数据类型: a:字 ...
- git flow的安装和使用
确保安装了git 1.windows系统下安装 进入cmd clone github上的gitflow到一个文件夹下 我这里clone到 c:\gitflow git clone git://gith ...