javascript - 确定 float 中前导零的数量

标签 javascript algorithm math floating-point language-agnostic

如何计算 float 中小数点之后但第一个非零之前有多少个零。示例:

0 -> 0
1 -> 0
1.0 -> 0
1.1 -> 0
1.01 -> 1
1.00003456 ->4

凭直觉,我假设有一个数学函数可以提供此功能,或者至少可以提供主要部分。但我既不记得也不知道是哪一个。

我知道这可以通过首先将数字转换为字符串来完成,只要数字不是科学计数法,但我想要一个纯数学解决方案。

在我的例子中,如果这很复杂,我不需要对负数有效的东西。

我想知道一般的方法是什么,不管语言如何。

但是如果有一个非常标准的数学函数,我也想知道 JavaScript 是否有这个函数。

作为旁注,我想知道这个计算是否与确定整数的十进制表示需要多少位的方法有关。

最佳答案

x 是一个非整数,可以写成整数部分的 n 数字,然后是小数点,然后是 m 零,然后是小数部分的其余部分。

x = [a1a2...an] . [0102...0m][b1b2...bm]

这意味着x的小数部分大于等于10–m,小于10–m+1

也就是说,x的小数部分的十进制对数大于等于–m,小于–m+1

反过来,这意味着 x 的小数部分的十进制对数的整数部分等于 –m

function numZeroesAfterPoint(x) {
  if (x % 1 == 0) {
    return 0;
  } else {
    return -1 - Math.floor(Math.log10(x % 1));
  }
}

console.log(numZeroesAfterPoint(0));
console.log(numZeroesAfterPoint(1));
console.log(numZeroesAfterPoint(1.0));
console.log(numZeroesAfterPoint(1.1));
console.log(numZeroesAfterPoint(1.01));
console.log(numZeroesAfterPoint(1.00003456));

As a sidenote, I wonder if this calculation is related to the method for determining how many digits are required for the decimal representation of an integer.

以同样的方式,当且仅当 x 时,正整数 nn - 1 <= log10(x) < n 十进制数字来表示它。

所以x的十进制表示的位数是floor(log10(x)) + 1

也就是说,我不建议在实践中使用这种确定位数的方法。 log10 不保证给出准确的对数值(甚至不如 IEEE 754 允许的那样准确),这可能会在某些边缘情况下导致不正确的结果。

关于javascript - 确定 float 中前导零的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46136440/

相关文章:

javascript - 如何在表单提交时创建新页面?

c++ - C++中2个64位数字的乘法

java - 基本英制转换问题

python - __hash__ 在 Python 3.2 中是如何实现的?

algorithm - 最小生成树的基本问题

c# - 在 C# 中计算整数 log2 的最快方法是什么?

javascript - JQuery 选择器标签 SUB 选择器

javascript - 如何缓存 OData 提要?

Javascript string.match 拒绝返回包含多个匹配项的数组

c# - 洪水填充算法