在javascript中将10提升到一个强大的力量,有没有比这更好的方法

Ste*_*e K 16 javascript exponentiation

我需要为特定功率创建一个整数值(这不是正确的术语,但基本上我需要创建10,100,1000等)."power"将被指定为函数参数.我提出了一个解决方案,但是MAN确实感到hacky和错误.我想学习更好的方法,如果有一个,也许一个不是基于字符串的?此外,eval()不是一个选项.

这是我现在所拥有的:

function makeMultiplierBase(precision)
{
    var numToParse = '1';
    for(var i = 0; i < precision; i++)
    {
        numToParse += '0';
    }

    return parseFloat(numToParse);
}
Run Code Online (Sandbox Code Playgroud)

我也想出了这个基于非字符串的解决方案,但由于循环仍然看起来很hacky:

function a(precision)
{
    var tmp = 10;
    for(var i = 1; i < precision; i++)
    {
        tmp *= 10;
    }

    return tmp;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我需要这样做来创建一个使用货币的舍入方法.我一直在使用var formatted = Math.round(value*100)/ 100

但是这个代码出现在各处,我想要一个方法来处理特定精度的舍入,所以我创建了这个

if(!Math.roundToPrecision)
{
    Math.roundToPrecision = function(value, precision)
    {
        Guard.NotNull(value, 'value');

        b = Math.pow(10, precision);
        return Math.round(value * b) / b;
    }  
}
Run Code Online (Sandbox Code Playgroud)

我以为我会把它包含在这里,因为它已被证明是方便的.

dav*_*vin 41

在ES5及更早版本中,使用Math.pow:

var result = Math.pow(10, precision);
Run Code Online (Sandbox Code Playgroud)

var precision = 5;
var result = Math.pow(10, precision);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

在ES2016及更高版本中,使用指数运算符:

let result = 10 ** precision;
Run Code Online (Sandbox Code Playgroud)

let precision = 5;
let result = 10 ** precision;
console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • @Davin - 我用谷歌搜索"泰勒扩展",在阅读维基百科的第一段时,血液开始从我的耳朵流出,因为我的视力模糊......我会接受Math.pow()很酷.; 0) (4认同)
  • 与大多数数学库一样,@ Steve可能会以标准要求的精度实现函数的数值近似.由于`Math.pow`不仅仅适用于整数,因此它的实现必须是所有"真实"数字的通用,所以它不是类似于你的循环实现(例如,根据5.672不能起作用) ; 也许是泰勒的扩张或类似的东西. (3认同)