检查值是不是为数字
Posted
技术标签:
【中文标题】检查值是不是为数字【英文标题】:Check if value is a number检查值是否为数字 【发布时间】:2011-06-28 22:43:36 【问题描述】:我怎样才能简单地检查类型为int
或uint
的返回值是否为数字?
【问题讨论】:
【参考方案1】:简单:
if(_myValue is Number)
fire();
// end if
[更新]
请记住,如果_myValue
的类型为int
或uint
,那么(_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
)、int
、uint
以及包含数字的有效表示的字符串,它将返回 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(已经提到过,我也不确定类型有多强)【讨论】:
以上是关于检查值是不是为数字的主要内容,如果未能解决你的问题,请参考以下文章