检查值是不是为数字

Posted

技术标签:

【中文标题】检查值是不是为数字【英文标题】:Check if value is a number检查值是否为数字 【发布时间】:2011-06-28 22:43:36 【问题描述】:

我怎样才能简单地检查类型为intuint 的返回值是否为数字?

【问题讨论】:

【参考方案1】:

简单:

if(_myValue is Number)

    fire();

// end if

[更新]

请记住,如果_myValue 的类型为intuint,那么(_myValue is Number) 也将等同于true。如果您想知道_myValue 是不是整数(int)或无符号整数(uint)的数字,也就是浮点数,那么您可以简单地修改条件如下:

(_myValue is Number && !(_myValue is int) && !(_myValue is uint))

我们来看一个例子:

package 

    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    

        public function Main():void 
        
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        

        private function init(e:Event = null):void 
        
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var number1:Object = 1; // int
            var number2:Object = 1.1; // float
            var number3:Object = 0x000000; // uint

            trace(number1 is Number); // true
            trace(number2 is Number); // true
            trace(number3 is Number); // true

            trace(number1 is Number && !(number1 is int) && !(number1 is uint)); // false
            trace(number2 is Number && !(number2 is int) && !(number2 is uint)); // true
            trace(number3 is Number && !(number3 is int) && !(number3 is uint)); // false

        

    


【讨论】:

"_myValue is Number" 仍然是 true,并且 typeof(_myValue) 仍然是 "number",即使 _myValue 被键入为 int 或 uint。根据***.com/a/9447869/88409 Flash 将整数值存储为整数,并且仅当值中有小数部分或超过 0x0FFFFFFF(可以存储在保留的 32 位原子的剩余 28 位中的最大值时) 3 位用于类型描述,1 位用于符号)。另请参阅***.com/a/2697151/88409 和此处的测试用例:troyworks.com/blog/2007/12/02/as3-understanding-uint-int-number 提问者想知道 _myValue 是否是一个数字,而不是一个数字。 @Robert 抱歉,有时我可能有点笨,不太清楚你在说什么。 @Taurayi 您的方法对有效的数字字符串返回 false。这个问题模棱两可,但我认为他正在寻找一种方法来判断某事物是否为数字,而不仅仅是数字类型。 要考虑数字字符串以及 Number、int 和 uint,测试要简单得多:var isNumeric:Boolean = !isNaN(Number(value));。这将处理任何数字值,但也会尝试将字符串转换为数字。如果它是一个数字或者可以转换为一个数字,那么它就是一个数值。无需使用 is 运算符显式测试 Number、int 和 uint 类型。【参考方案2】:

如果您只想知道 myValue 是否为 数字类型之一(Number、int、uint),您可以按照 Taurayi 的建议检查 (_myValue is Number)

如果您想知道 _myValue 是否为 数字字符串(如“6320”或“5.987”),请使用:

if (!isNaN(Number(_myValue)))

    fire();

它使用Number(_myValue)_myValue 转换为Number 类。如果Number 无法将其转换为有用的数字,它将返回NaN,因此我们使用!isNaN() 来确保返回的值不是“不是数字”。

对于Number 类型的任何变量(只要它的值不是NaN)、intuint 以及包含数字的有效表示的字符串,它将返回 true。

【讨论】:

国际海事组织,这是最好的答案。这正是我会发布的。虽然它没有完全解释 Number、int 和 uint 之间的关系(即任何 int 都是 Number,但 Numbers 不一定是 ints 或 uint),但这种实现比条件检查要好,部分原因是它还需要考虑数字字符串。 @Triynko 我编辑了我的答案以更好地解释数字类型。【参考方案3】:

如果您希望检查文本字段的输入,这些方法可能会出现问题,该文本字段“始终”是一个字符串。如果你有一个带有“123”的字符串并且用“123”检查是数字,你会得到一个假的。所以 Number("123") 会给出 true,但 Number("lalala") 也会同样如此(尽管结果是 NaN 会告诉你 NaN 是 Number (true)。

要使用字符串,您可以这样做:

var s:String = "1234";
String(Number(s)) == String(s);
--True

var s:String = "lalala";
String(Number(s)) == String(s);
--False

【讨论】:

【参考方案4】:

isNaN(你会想要否定这个) typeof(不确定 Number 类型的工作强度如何) 和is(已经提到过,我也不确定类型有多强)

【讨论】:

以上是关于检查值是不是为数字的主要内容,如果未能解决你的问题,请参考以下文章

检查输入的值是不是为数字

使用测试检查输入的值是不是为数字或字母[重复]

c语言中如何检查输入值是不是为数字

PHP - 如何检查一行中字符串的前 4 个值是不是为数字

提交表单时测试值是不是为数字不起作用

java 检查是否数字