当前位置: 首页 > 知识库问答 >
问题:

如何验证十进制数是否在0.001,0.002,…,2.048序列中

祝高超
2023-03-14

对于整数[1,2,4,8,16,...]我可以使用这个函数:

const validate = num => (num & num - 1) == 0;

有没有一种优雅的类似的方法可以在不使用循环的情况下用十进制数字来做呢?

  • 0.001
  • 0.002
  • 0.004
  • ...
  • 2.048

并且应该可以根据一个初始值在小数点后使用任意数量的数字。

  • 0.0001(初始值)
  • 0.0002
  • 0.0004
  • 0.0016
  • ...
  • 1.6384

现在我使用函数来确定十进制逗号后面是否有数字,并对它们进行计数:

countDecimals(num) {
  if (Math.floor(num.valueOf()) === num.valueOf()) return 0;
  return num.toString().split(".")[1].length || 0;
}

然后我用它:

validateEntryValue(entryValue) {
  const decimalsQuantity = this.countDecimals(entryValue);
  if (decimalsQuantity) {
    const numToMul = Math.pow(10, decimalsQuantity);
    return ((entryValue * numToMul) & (entryValue * numToMul) - 1) == 0;
  }
  return (entryValue & entryValue - 1) == 0;
}

但某些结果值无法通过测试:

  • 0.001(初始值)
  • 0.002
  • 0.004
  • 0.016
  • 0.02(不应验证,因为初始值不是0.01)

共有1个答案

程项禹
2023-03-14

A第一项

n-10索引中的第n项

D公共差异

您可以简单地检查数组元素是否服从上面提到的表达式。

null

const validateSeq = (seq) => {
  if (seq.length <= 2) {
    return [true, true];
  }
  const 
    step = seq[1] - seq[0],
    res = seq.map((s, i) => seq[0] + i * step === s);
  return res;
};

console.log(validateSeq([0.01, 0.02, 0.03, 0.4, 0.05]));
 类似资料:
  • 问题内容: 在JavaScript中验证十进制数字的最干净,最有效的方法是什么? 奖励积分: 明晰。解决方案应该干净简单。 跨平台。 测试用例: 问题答案: @Joel的答案非常接近,但在以下情况下将失败: 前段时间,我必须实现一个函数,以查明变量是否包含数值, 无论其类型如何 ,它都可能是包含数值(我还必须考虑指数符号等),对象,几乎任何东西都可以传递给该函数,我不能做任何类型假设,要注意类型强

  • 问题内容: 使用Swift 3。 我在网上发现许多奇怪的解决方案,用于检查对象是否为整数。一切都比需要的复杂得多。 这是我的解决方案: 在我的测试中,这可行。我的问题是我缺少明显的东西吗? 问题答案: 感谢您的评论!这是我现在正在使用的。

  • 问题内容: 我有以下内容,其中是是,并且由表示: 我的应用程序中还实现了另一个。 我的问题是,从我的第二个中找出我是否包含特定内容的最佳方法是什么? 我尝试过但没有成功: 问题答案: 为什么不: 而且,如果您必须遍历整个,而不是只寻找一个特定值: 编辑 过去,我用一些Java 8惯用语对此进行了更新。 Java 8流API允许使用更具声明性(并且可以说是优雅的)的方式来处理这些类型的迭代。 例如,

  • 问题内容: 如何在JavaScript中将十进制值转换为等效的十六进制值? 问题答案: 使用以下命令将数字转换为十六进制字符串: 并通过以下步骤逆向处理:

  • 问题内容: 我有一些Perl代码,其中hex()函数将十六进制数据转换为十进制。如何在Python上执行此操作? 问题答案: 如果用“十六进制数据”表示字符串形式 您可以使用 将其转换为整数并 将其转换为十进制字符串。