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

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

【问题讨论】:

    标签: flash actionscript-3 adobe air


    【解决方案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。根据stackoverflow.com/a/9447869/88409 Flash 将整数值存储为整数,并且仅当值中有小数部分或超过 0x0FFFFFFF(可以存储在保留的 32 位原子的剩余 28 位中的最大值时) 3 位用于类型描述,1 位用于符号)。另请参阅stackoverflow.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(已经提到过,我也不确定类型有多强)

      【讨论】:

        猜你喜欢
        • 2013-01-06
        • 1970-01-01
        • 2012-10-29
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 2013-05-27
        • 1970-01-01
        相关资源
        最近更新 更多