honest_knave:
我想你没有理解这个问题。我写了上面的代码,预计编译器会返回错误,因为 "四 "不是一个数字。但它却返回true(意思是 "四 "是一个数字)。我怎样才能适当地编码呢?我并不要求将 "四 "转换为数字。
MathIsValidNumber并不是这样工作的。它不会把 "四 "理解为4,而不是 "四 "或 "FOUR "或 "Vier "或 "Quatre "或 "Quatro"。
如果你把 "四 "作为一个双数,结果是0。
由于0是一个有效的数字,你的函数 返回真。
如果你想实现这一点,你将需要建立你自己的字到数字的转换。
你的编译器应该警告你有隐含的转换......你有
#property strict
在你的代码的顶部?
我认为你没有理解答案
如果你把 "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");
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是一个有效的数字吗?
honest_knave:
那么,你不明白我的答案中的哪一点呢?
但OBJPROP_TEXT 是 "四 "而不是 "0"。还有,你说它会把 "Four "视为 "0",因为......现在的问题是,我有没有把 "Four "推到双倍?我的代码的哪一部分把 "Four "或 "Banana "或 "Metaquote "推到了双倍?
那么,你不明白我的答案中的哪一点呢?
honest_knave:
当然是0。但是与我写的代码相对应的问题是,你并没有要求我从 "sdgfjhsdfkjdshfkjsfdhskdjh "中做出一个数字。而是决定 "sdgfjhsdfkjdshfkjsfdhskdjh "是否是一个数字。所以我认为你可以把 "sdgfjhsdfkjdshfkjsfdhskdjh "做成一个数字。但事实是,"sdgfjhsdfkjdshfksfdhskdjh "不是一个数字。
如果我说用 "sdgfjhsdfkjdshfkjsfdhskdjh "组成一个数字,你会给我什么数字?
if (MathIsValidNumber(ObjectGetString(0,"SimultaneousReleaseIndex",OBJPROP_TEXT))==true){Print("Object Text Is Numeric");}