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, 1, MidpointRounding.AwayFromZero); // 返回123.5
Math.Round(123.45, 1, 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中的数学运算函数为什么有这么多计算上的问题,是不是在设计之初有什么特殊的考虑呢?


本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/p/3191187.html,如需转载请自行联系原作者

相关文章
|
1月前
|
JavaScript 前端开发
javascript中的var
javascript中的var
|
2月前
|
JavaScript 前端开发
JavaScript typeof、nul
JavaScript typeof、null和undefined是JavaScript编程中常用的三种类型。 typeof是JavaScript中的一个操作符,用于判断变量的类型。它的返回值是一个字符串,表示变量的数据类型。typeof的用法很简单,例如:typeof x,它会返回一个表示x的数据类型的字符串。typeof的返回值有六种,分别是:"undefined"、"boolean"、"string"、"number"、"object"和"function"。
11 1
|
12月前
|
JavaScript 前端开发
JavaScript学习笔记(九) var、let、const
JavaScript学习笔记(九) var、let、const
89 0
|
JavaScript 前端开发 安全
JavaScript Undefined与Null
JavaScript Undefined与Null
53 0
|
JavaScript 安全 前端开发
JavaScript中的 let 和 var
JavaScript中的 let 和 var
114 0
JavaScript中的 let 和 var
|
存储 JavaScript 前端开发
再说 JavaScript 的 null 和 undefined
在 JavaScript 中关于空值的定义会应项目的不同而不同,通常在与后台接口对接的时候,判断数据是否存在需要判断空字符串 ""、null、undefined。本文带大家再复习一下 null 和 undefined 。
112 0
|
JavaScript 前端开发
JavaScript函数(Function)
JavaScript函数(Function) 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
JavaScript函数(Function)
|
JavaScript 前端开发
initializeCachedDB function in JavaScript - how is the call delegated to
Created by Wang, Jerry, last modified on Nov 17, 2015
initializeCachedDB function in JavaScript - how is the call delegated to
|
JavaScript 前端开发
Javascript中的undefined null 与NaN
本文目录 1. undefined 2. null 3. NaN
|
JavaScript 前端开发
JavaScript == 和 ===
JavaScript == 和 ===
139 0