gpt4 book ai didi

javascript - 计算数字有效数字位数的最快方法是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 05:04:03 26 4
gpt4 key购买 nike

计算一个数的有效位数的最快方法是什么?

我有以下功能,它可以工作,但由于字符串操作而速度很慢。

/**
* Count the number of significant digits of a number.
*
* For example:
* 2.34 returns 3
* 0.0034 returns 2
* 120.5e+3 returns 4
*
* @param {Number} value
* @return {Number} The number of significant digits
*/
function digits (value) {
return value
.toExponential()
.replace(/e[\+\-0-9]*$/, '') // remove exponential notation
.replace( /^0\.?0*|\./, '') // remove decimal point and leading zeros
.length
};

有没有更快的方法?

更新:这里是测试正确功能的断言列表:

assert.equal(digits(0), 0);
assert.equal(digits(2), 1);
assert.equal(digits(1234), 4);
assert.equal(digits(2.34), 3);
assert.equal(digits(3000), 1);
assert.equal(digits(0.0034), 2);
assert.equal(digits(120.5e50), 4);
assert.equal(digits(1120.5e+50), 5);
assert.equal(digits(120.52e-50), 5);
assert.equal(digits(Math.PI), 16);

我自己的方法对 digits(0) 失败,我通过在第二个正则表达式中添加 ? 来解决这个问题。

最佳答案

这里有一个更数学化的方法来完成同样的操作(看起来明显更快)

JSPerf三种实现方式对比

整数精确 n < +-(2^53) http://ecma262-5.com/ELS5_HTML.htm#Section_8.5
float 被转换为字符串,然后被强制转换为 int(通过删除小数点,因此适用类似的规则)

var log10 = Math.log(10);
function getSignificantDigitCount(n) {
n = Math.abs(String(n).replace(".", "")); //remove decimal and make positive
if (n == 0) return 0;
while (n != 0 && n % 10 == 0) n /= 10; //kill the 0s at the end of n

return Math.floor(Math.log(n) / log10) + 1; //get number of digits
}

关于javascript - 计算数字有效数字位数的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com