我需要使用JavaScript将十进制数字舍入到六个位置,但我需要考虑旧版浏览器,因此我can't rely on Number.toFixed
toExponential,toFixed和toPrecision的最大优点是它们是Mozilla中不支持的相当现代的构造,直到Firefox 1.5版(尽管IE支持自5.5版以来的方法)。虽然使用这些方法最安全,但是如果您正在编写公共程序,那么旧的浏览器将会破坏,因此建议您提供自己的原型,以便为旧浏览器提供这些方法的功能。
我正在考虑使用像
这样的东西Math.round(N*1000000)/1000000
将此原型提供给旧浏览器的最佳方法是什么?
答案 0 :(得分:15)
试试这个:
if (!Number.prototype.toFixed)
Number.prototype.toFixed = function(precision) {
var power = Math.pow(10, precision || 0);
return String(Math.round(this * power)/power);
}
答案 1 :(得分:0)
我认为Firefox 1.5和IE 5几乎不再使用,或者只是极少数人使用
这有点像支持Netscape Navigator的编码... :-)
除非其他主要浏览器(Opera?Safari?不太可能......)不支持此功能,或者您的Web日志显示许多旧版浏览器使用,否则您可以使用这些方法。
有时,我们必须继续前进。 ^ _ ^
[编辑]在Opera 9.50和Safari 3.1上正常工作
javascript: var num = 3.1415926535897932384; alert(num.toFixed(7));
您所引用的文章是一年半以前,IT行业的永恒......我认为,与IE用户不同,Firefox用户经常会使用最新版本。
答案 2 :(得分:0)
从Bytes website起,这个功能几乎与Serge llinsky的相同:
if (!num.toFixed)
{
Number.prototype.toFixed = function(precision)
{
var num = (Math.round(this*Math.pow(10,precision))).toString();
return num.substring(0,num.length-precision) + "." +
num.substring(num.length-precision, num.length);
}
}
答案 3 :(得分:0)
另一个选项是(不会不必要地转换为字符串,并且还纠正了(162.295).toFixed(2)到162.29(应该是162.30)的错误计算。)
Number.prototype._toFixed=Number.prototype.toFixed; //Preserves the current function
Number.prototype.toFixed=function(precision){
/* step 1 */ var a=this, pre=Math.pow(10,precision||0);
/* step 2 */ a*=pre; //currently number is 162295.499999
/* step 3 */ a = a._toFixed(2); //sets 2 more digits of precision creating 16230.00
/* step 4 */ a = Math.round(a);
/* step 5 */ a/=pre;
/* step 6 */ return a._toFixed(precision);
}
/*This last step corrects the number of digits from 162.3 ( which is what we get in
step 5 to the corrected 162.30. Without it we would get 162.3 */
编辑:尝试此特定版本后,this*=Math.pow(10, precision||0)
会创建无效的左手分配错误。所以给了this关键字变量a
。如果我关闭我的函数^ _ ^ ;;
答案 4 :(得分:0)
试试这个:
Number.prototype.toFixed = function(precision) {
var power = Math.pow(10, precision || 0);
return String(Math.round(this * power)/power);
}