当前位置: 首页 > 面试题库 >

验证JavaScript中的十进制数字-IsNumeric()

满耀
2023-03-14
问题内容

在JavaScript中验证十进制数字的最干净,最有效的方法是什么?

奖励积分:

  1. 明晰。解决方案应该干净简单。
  2. 跨平台。

测试用例:

01. IsNumeric('-1')      => true
02. IsNumeric('-1.5')    => true
03. IsNumeric('0')       => true
04. IsNumeric('0.42')    => true
05. IsNumeric('.42')     => true
06. IsNumeric('99,999')  => false
07. IsNumeric('0x89f')   => false
08. IsNumeric('#abcdef') => false
09. IsNumeric('1.2.3')   => false
10. IsNumeric('')        => false
11. IsNumeric('blah')    => false

问题答案:

@Joel的答案非常接近,但在以下情况下将失败:

// Whitespace strings:
IsNumeric(' ')    == true;
IsNumeric('\t\t') == true;
IsNumeric('\n\r') == true;

// Number literals:
IsNumeric(-1)  == false;
IsNumeric(0)   == false;
IsNumeric(1.1) == false;
IsNumeric(8e5) == false;

前段时间,我必须实现一个IsNumeric函数,以查明变量是否包含数值, 无论其类型如何
,它都可能是String包含数值(我还必须考虑指数符号等),Number对象,几乎任何东西都可以传递给该函数,我不能做任何类型假设,要注意类型强制(例如,+true == 1;true不应视为"numeric")。

分享通过的测试:

function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

由于强制转换为数字,因此PS的行为令人困惑。在ES6中,Number.isNaN和Number.isFinite将解决这些问题。使用它们时请记住这一点。

这是jQuery现在的方式(2.2稳定):

isNumeric: function(obj) {
    var realStringObj = obj && obj.toString();
    return !jQuery.isArray(obj) && (realStringObj - parseFloat(realStringObj) + 1) >= 0;
}

更新 : Angular4.3:

export function isNumeric(value: any): boolean {
    return !isNaN(value - parseFloat(value));
}


 类似资料:
  • 问题内容: 我试图将十进制数字截断到小数位。像这样: 所做的只是正确的事情,但是却舍入了价值。我不需要四舍五入的价值。希望这是可能的JavaScript。 问题答案: 更新 : 因此,无论如何,四舍五入的bug总是会困扰着您,无论您如何努力补偿它们。因此,应该通过精确地用十进制表示法来解决该问题。 旧的易出错的解决方案基于其他人的编译:

  • 我有两个字符串的输入,每个字符串以十进制格式表示一个非负有理数。 给定这两个字符串,我想检查由x表示的数值是否大于由y表示的数值。 这两个值可以非常大,也可以扩展到非常高的精度(即小数点后的许多数字)。 因此,我不能依赖

  • 我必须为赋值创建二进制到十进制的数字转换器。这项任务有一些限制。它们是:1。没有无限循环2。中断语句以退出循环3。没有标签或转到语句4。不使用整数。parseInt(字符串s,整数基数) 我得到了部分转换下来,但我有异常处理的问题。我试图在输入不是二进制时显示错误消息,并继续允许用户输入,每次无效的尝试都显示相同的错误消息。 我曾尝试用while和do-while循环替换for循环,但结果对我来说

  • 想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 我需要一个正则表达式,它将以这样的方式验证十进制数: 小数点之前/之后可以有任意数量的数字 整数的最大长度为50(不包括小数点) 例如,如果小数点前有5位数字,则小数点后最多可以有45位数字。 允许有50位数字,无小数点。 例如,它应该匹配这些数字: 1234567890123456789012345678901234567890

  • 问题内容: 我在java(JDK 1.4)中对小数的管理有问题。 我的 第一个* 和 第二个 有两个 双 精度数字(作为格式化 String的 输出)。我在拳头和秒针之间求和,并且我得到一个带有更多十进制数字的数字! *** __ 我宁愿不增加阈值( 0.5d ),因为在类似情况下我也不安全(当我开始编码时,规范将 0.1d 作为比较值)。如果这是唯一的解决方案,那么 0.9d 的值是解决此问题的

  • 我正在使用DecimalFormats将双打格式化为字符串。然后这个字符串被集成到我的表示层中。 问题:我想保留所有的小数。示例:“12345678.123456789” 格式:#.#- 我可以用##########对于大小数点,但是如果小数点更长呢? 我发现我的小测试程序很有用,想和大家分享。 你能帮我显示所有小数吗? 这导致: 编辑:一位用户提到了一个相关的问题:如何很好地将浮点数格式化为字符