如何检查一个变量的内容是否是数字?

 
大家好。我如何检查 一个变量的内容是否是数字,特别是聊天中的文本框对象的内容?我试过下面的方法,但不奏效。

ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");

if (MathIsValidNumber(ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT))==true){Print("Object Text Is Numeric");}
如果事实上它一直显示为真,无论OBJPROP_TEXT是否是数字的。有什么办法可以解决这个问题。先谢谢了。
 

MathIsValidNumber并不是这样工作的。它不会把 "四 "理解为4,而不是 "四 "或 "FOUR "或 "Vier "或 "Quatre "或 "Quatro"。

如果你把 "四 "作为一个双数,结果是0。

由于0是一个有效的数字,你的函数 返回真。

如果你想实现这一点,你将需要建立你自己的字到数字的转换。

你的编译器应该警告你有隐含的转换......你有

#property strict

在你的代码的顶部?

 
honest_knave:

MathIsValidNumber并不是这样工作的。它不会把 "四 "理解为4,而不是 "四 "或 "FOUR "或 "Vier "或 "Quatre "或 "Quatro"。

如果你把 "四 "作为一个双数,结果是0。

由于0是一个有效的数字,你的函数 返回真。

如果你想实现这一点,你将需要建立你自己的字到数字的转换。

你的编译器应该警告你有隐含的转换......你有

#property strict

在你的代码的顶部?

我想你没有理解这个问题。我写了上面的代码,预计编译器会返回错误,因为 "四 "不是一个数字。但它却返回true(意思是 "四 "是一个数字)。我怎样才能适当地编码呢?我并不要求将 "四 "转换为数字。
 

我认为你没有理解答案

如果你把 "Four "或 "banana "或 "MetaQuotes "这样的字符串推入一个双数,结果是0。

0是一个有效的数字。

如果你使用的是#property strict,你的编译器会提醒你这个问题。

你可以测试 "数字 "是否为0,但你无法追踪它是否被故意输入为0,或者只是在转换过程中被转换为0。

   ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
   double as_double = (double) ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT);
   if(as_double !=0 && MathIsValidNumber(as_double)) Print("Object Text Is Numeric");
 
honest_knave:

我认为你没有理解答案

如果你把 "Four "或 "banana "或 "MetaQuotes "这样的字符串推入一个双数,结果是0。

0是一个有效的数字。

如果你使用的是#property strict,你的编译器会提醒你这个问题。

请再次检查 我的初始代码。我只是做了一个小小的修正。它应该是
ObjectSetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
而不是
ObjectSetInteger(0,"SimultaneousReleaseIndex",OBJPROP_TEXT,"Four");
对不起,给您带来不便。你现在也可以更正你的答案了。 谢谢,因为我期待着你的善意回答。我认为我没有使用#property strict。
 

请再读一下我的帖子。

你同意0是一个有效的数字吗?

 
honest_knave:

请再读一下我的帖子。

你同意0是一个有效的数字吗?

当然,0是一个有效的数字。为什么这么问?
 
macpee:
当然,0是一个有效的数字

那么,我的回答中哪一点你不明白?

我再重复一遍。

honest_knave:

如果你把 "四 "投成一个双数,结果是0。

由于0是一个有效的数字,你的函数 返回真。

honest_knave:

如果你把 "Four "或 "banana "或 "MetaQuotes "这样的字符串推到一个双数中,结果是0。

0是一个有效的数字。

 
honest_knave:
那么,你不明白我的答案中的哪一点呢?
OBJPROP_TEXT 是 "四 "而不是 "0"。还有,你说它会把 "Four "视为 "0",因为......现在的问题是,我有没有把 "Four "推到双倍?我的代码的哪一部分把 "Four "或 "Banana "或 "Metaquote "推到了双倍?
 
macpee:
但是OBJ_TEXT 是 "四 "而不是 "0"。另外,你说它会把 "四 "看作 "0",因为......现在的问题是,我有没有把 "四 "推成双数?

如果我说用 "sdgfjhsdfkjdshfkjsfdhskdjh "组成一个数字,你会给我什么数字?

 
honest_knave:

如果我说用 "sdgfjhsdfkjdshfkjsfdhskdjh "组成一个数字,你会给我什么数字?

当然是0。但是与我写的代码相对应的问题是,你并没有要求我从 "sdgfjhsdfkjdshfkjsfdhskdjh "中做出一个数字。而是决定 "sdgfjhsdfkjdshfkjsfdhskdjh "是否是一个数字。所以我认为你可以把 "sdgfjhsdfkjdshfkjsfdhskdjh "做成一个数字。但事实是,"sdgfjhsdfkjdshfksfdhskdjh "不是一个数字。