如果不允许我选择我想要的小数位数,我就不需要使用Math.round功能。所以我创建了以下使用的函数。
Number.prototype.round = function(precision) {
var numPrecision = (!precision) ? 0 : parseInt(precision, 10);
var roundedNum = Math.round(this * Math.pow(10, numPrecision)) / Math.pow(10, numPrecision);
return roundedNum;
};
我的问题是,我可以将其更改为以下内容而不会产生任何影响。
Math.roundP = function(num, precision){
var pow = Math.pow(10, precision||0);
return (Math.round(num*pow) / pow);
};
我意识到这将覆盖默认的Math.round功能,但我不需要它。这在Javascript中可以吗?我之前没有这样做,所以我只想看看人们对此的看法。或者对我来说更好的方式就是让它保持原样。
我无法决定何时使用Number.prototype,以及何时使用Math。
答案 0 :(得分:3)
你可以,但我强烈建议反对它。根据标准功能,它显然会破坏任何第三方代码。
您发布的特定代码也具有无限递归。您需要存储原始Math.round
。但这又说明了为什么不搞乱标准功能。我们都写错误,但最好将它们限制在我们的代码中。
答案 1 :(得分:2)
当我尝试你的功能时,我收到一个递归错误,但缺点是它很好。只要你将精度默认为零,意味着如果没有传递第二个参数,它将与原始函数相同,你不会有任何影响。
但是,对于最佳实践,最好将其称为其他内容。
仅供参考,我的版本:
Math.roundP = function(num, precision){
var pow = Math.pow(10, precision||0);
return (Math.round(num*pow) / pow);
};
答案 2 :(得分:1)
我之前使用过这种方法
Math.round = function(number, precision)
{
precision = Math.abs(parseInt(precision)) || 0;
var coefficient = Math.pow(10, precision);
return Math._round(number*coefficient)/coefficient;
}
http://leaverou.me/2009/02/extend-mathround-mathceil-and-mathfloor-to-allow-precision/
答案 3 :(得分:1)
我发现了这个:http://www.mredkj.com/javascript/nfbasic2.html
允许你只说:num.toPrecision(n),你就完成了。
该链接解释了更多。
希望有所帮助。
答案 4 :(得分:0)
如果您100%确定您在其他任何地方都没有使用Math.round,那么最好不要做出这个假设。猴子修补像这样的常见功能几乎可以证明是好的。
您使用的外部库可能会很好地使用此方法,这会搞砸。