변수의 내용이 숫자인지 어떻게 확인합니까? - 페이지 4 12345 새 코멘트 honest_knave 2017.02.17 13:58 #31 Alain Verleyen : 당신은 복잡함을 정말 좋아합니다. 목표가 실수를 처리하는 것이라면 StringToDouble()을 사용 하고 특수한 경우 0을 처리하십시오. 이것이 초기 솔루션이었습니다. 정직한_knave : 값이 0이 될 것으로 예상하지 않으면 문자열을 double로 유형 캐스트하고 0이 아닌지 테스트합니다. 그러나 OP는 0이 입력된 값인지 또는 0이 잘못된 숫자인 문자열의 결과인지 구별하는 작업을 할 수 있기를 원했습니다. "0"과 "sfdlgkjsflkjdsklfsd"는 모두 StringToDouble() 또는 (double)을 사용하여 0이 됩니다. 이것은 이후의 논의를 촉발시킨 OP에서 용납할 수 없었습니다. Alain Verleyen 2017.02.17 14:06 #32 honest_knave : 이것이 초기 솔루션이었습니다. 그러나 OP는 0이 입력된 값인지 또는 0이 잘못된 숫자인 문자열의 결과인지 구별하는 작업을 할 수 있기를 원했습니다. "0"과 "sfdlgkjsflkjdsklfsd"는 모두 StringToDouble() 또는 (double)을 사용하여 0이 됩니다. 이것은 이후의 논의를 촉발시킨 OP에서 용납할 수 없었습니다. 그래서 제가 "특수 케이스 0의 처리"라고 말한 것입니다. 단순화된 예: double value =StringToDouble(inputs); if ( value == 0 ) { if (inputs== "0" || inputs== "0.0" ) { //--- all is ok } else { //--- wrong inputs } } honest_knave 2017.02.17 14:06 #33 Alain Verleyen : 그래서 제가 "특수 케이스 0의 처리"라고 말한 것입니다. 단순화된 예: double value =StringToDouble(inputs); if ( value == 0 ) { if (inputs== "0" || inputs== "0.0" ) { //--- all is ok } else { //--- wrong inputs } } 그리고 0.00은 어떻습니까? 또는 +0.00? 아니면 .0? 정직한_knave : 네, 문제입니다. 캐스트 값 = 0인 경우 문자열 비교를 수행할 수 있습니다. 즉 if(cast_value == 0 && str_value == "0") 그러나 0.0 또는 0.00이 입력되는 것에 대해 생각해야 합니다. 문자열을 문자 배열로 버스트하고 각 문자를 테스트할 수 있습니다. 이것이 얼마나 중요한지에 달려 있습니다. Alain Verleyen 2017.02.17 14:25 #34 honest_knave : 그리고 0.00은 어떻습니까? 또는 +0.00? 아니면 .0? 그래서 내가 "단순한 예"라고 말한 것입니다. 나는 OP를 위해 일하지 않을 것이다. honest_knave 2017.02.17 14:34 #35 Alain Verleyen : 그래서 내가 "단순한 예"라고 말한 것입니다. 나는 OP를 위해 일하지 않을 것이다. 흥미로운 연습입니다. 그럼에도 불구하고 "0"의 가능한 변형 목록을 갖는 것이 더 낫습니까, 아니면 그냥 모든 것을 테스트하는 것이 더 낫습니까? 전자는 틀림없이 빠르지만 합법적인 변형을 놓칠 위험이 있습니다. 그러나 CHARTEVENT_OBJECT_ENDEDIT 에서만 테스트해야 하는 경우 속도가 얼마나 중요 합니까? 그럼에도 불구하고, OP는 이제 계속할 일이 많다고 확신합니다! Alain Verleyen 2017.02.17 14:48 #36 honest_knave : 흥미로운 연습입니다. 그럼에도 불구하고 "0"의 가능한 변형 목록을 갖는 것이 더 낫습니까, 아니면 그냥 모든 것을 테스트하는 것이 더 낫습니까? 전자는 틀림없이 빠르지만 합법적인 변형을 놓칠 위험이 있습니다. 그러나 CHARTEVENT_OBJECT_ENDEDIT 에서만 테스트해야 하는 경우 속도가 얼마나 중요합니까? 그럼에도 불구하고, OP는 이제 계속할 일이 많다고 확신합니다! 0을 "0"으로 입력하고 다른 모든 경우를 거부하도록 요청할 수도 있습니다. 또는 정규식 사용 :-D honest_knave 2017.02.17 14:52 #37 Alain Verleyen : 0을 "0"으로 입력하고 다른 모든 경우를 거부하도록 요청할 수도 있습니다. 또는 정규식 사용 :-D 개인적으로 다음과 같은 접근 방식을 취하고 있습니다. ENDEDIT가 발생하면 OBJ_TEXT 를 double로 변환한 다음 편집 상자에 문자열로 다시 푸시합니다(형식을 제어 하려면 StringFormat() 사용). 사용자는 즉시 자신의 작업 결과를 보고 필요에 맞지 않으면 변경하거나 그대로 둡니다. 예 #property strict #define EDIT_BOX "EditBox" int OnInit () { ObjectCreate ( 0 , EDIT_BOX, OBJ_EDIT , 0 , 0 , 0 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XDISTANCE , 200 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YDISTANCE , 200 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XSIZE , 100 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YSIZE , 20 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_ALIGN , ALIGN_CENTER ); ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , "Enter Value" ); return ( INIT_SUCCEEDED ); } void OnDeinit ( const int reason) { ObjectDelete ( 0 , EDIT_BOX); } void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam) { if (id== CHARTEVENT_OBJECT_ENDEDIT && sparam==EDIT_BOX) { double value = ( double ) ObjectGetString ( 0 , EDIT_BOX, OBJPROP_TEXT ); ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , ( string )value); } } How do I check Help with chart event expert advisor - miscellaneous Alain Verleyen 2017.02.17 16:18 #38 honest_knave : 개인적으로 다음과 같은 접근 방식을 취하고 있습니다. ENDEDIT가 발생하면 OBJ_TEXT 를 double로 변환한 다음 편집 상자에 문자열로 다시 푸시합니다(형식을 제어하려면 StringFormat() 사용). 사용자는 즉시 자신의 작업 결과를 보고 필요에 맞지 않으면 변경하거나 그대로 둡니다. 예 #property strict #define EDIT_BOX "EditBox" int OnInit () { ObjectCreate ( 0 , EDIT_BOX, OBJ_EDIT , 0 , 0 , 0 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XDISTANCE , 200 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YDISTANCE , 200 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XSIZE , 100 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YSIZE , 20 ); ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_ALIGN , ALIGN_CENTER ); ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , "Enter Value" ); return ( INIT_SUCCEEDED ); } void OnDeinit ( const int reason) { ObjectDelete ( 0 , EDIT_BOX); } void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam) { if (id== CHARTEVENT_OBJECT_ENDEDIT && sparam==EDIT_BOX) { double value = ( double ) ObjectGetString ( 0 , EDIT_BOX, OBJPROP_TEXT ); ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , ( string )value); } } 입력을 검증할 방법이 필요합니다. (추가 버튼?) 간단하게 유지하세요. 어쨌든, 당신이 원하는대로 :p honest_knave 2017.02.17 16:30 #39 Alain Verleyen : 입력을 검증할 방법이 필요합니다. (추가 버튼?) 팔로우 안하고...? OP의 의도를 잘못 이해했을 수도 있지만 인터페이스가 동적일 것이라고 생각합니다. 즉, 이 편집 상자를 변경하면 그에 따라 다른 상자가 업데이트됩니다. 유효성 검사 버튼이 있을 수 있지만 결과가 단순히 표시되는 경우(작업이 아니라) 불필요한 추가일 수 있습니다. 그러나 확실하지 않습니다. OP는 명확히해야합니다. 알랭 벌리앙 : 간단하게 유지하세요. 어쨌든 원하는대로 :p 나는 일을 단순하게 유지하는 것에 매우 동의합니다. 이보다 더 간단해지나요? double value = ( double ) ObjectGetString ( 0 , EDIT_BOX, OBJPROP_TEXT ); ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , ( string )value); 추신: 제가 원하는 대로 될지는 모르겠지만 저를 위한 학술적 토론일 뿐입니다. 필요 없습니다! How do I check 동일한 동작을 유발하는 조건에서 전문 고문 - 기타 Alain Verleyen 2017.02.17 18:52 #40 honest_knave : 팔로우 안하고...? ... 솔직히 나는 OP의 의도에 대해 전혀 모른다 일반적인 요청으로 받아들인다면 "변수의 내용이 숫자인지 확인 하는 방법?", 가장 우아한 솔루션은 정규식을 사용하는 것입니다. 12345 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
당신은 복잡함을 정말 좋아합니다. 목표가 실수를 처리하는 것이라면 StringToDouble()을 사용 하고 특수한 경우 0을 처리하십시오.
이것이 초기 솔루션이었습니다.
값이 0이 될 것으로 예상하지 않으면 문자열을 double로 유형 캐스트하고 0이 아닌지 테스트합니다.
그러나 OP는 0이 입력된 값인지 또는 0이 잘못된 숫자인 문자열의 결과인지 구별하는 작업을 할 수 있기를 원했습니다. "0"과 "sfdlgkjsflkjdsklfsd"는 모두 StringToDouble() 또는 (double)을 사용하여 0이 됩니다.
이것은 이후의 논의를 촉발시킨 OP에서 용납할 수 없었습니다.
이것이 초기 솔루션이었습니다.
그러나 OP는 0이 입력된 값인지 또는 0이 잘못된 숫자인 문자열의 결과인지 구별하는 작업을 할 수 있기를 원했습니다. "0"과 "sfdlgkjsflkjdsklfsd"는 모두 StringToDouble() 또는 (double)을 사용하여 0이 됩니다.
이것은 이후의 논의를 촉발시킨 OP에서 용납할 수 없었습니다.
단순화된 예:
if ( value == 0 )
{
if (inputs== "0" || inputs== "0.0" )
{
//--- all is ok
}
else
{
//--- wrong inputs
}
}
그래서 제가 "특수 케이스 0의 처리"라고 말한 것입니다.
단순화된 예:
if ( value == 0 )
{
if (inputs== "0" || inputs== "0.0" )
{
//--- all is ok
}
else
{
//--- wrong inputs
}
}
그리고 0.00은 어떻습니까?
또는 +0.00?
아니면 .0?
네, 문제입니다.
캐스트 값 = 0인 경우 문자열 비교를 수행할 수 있습니다.
즉 if(cast_value == 0 && str_value == "0")
그러나 0.0 또는 0.00이 입력되는 것에 대해 생각해야 합니다.
문자열을 문자 배열로 버스트하고 각 문자를 테스트할 수 있습니다.
이것이 얼마나 중요한지에 달려 있습니다.
그리고 0.00은 어떻습니까?
또는 +0.00?
아니면 .0?
그래서 내가 "단순한 예"라고 말한 것입니다. 나는 OP를 위해 일하지 않을 것이다.
흥미로운 연습입니다. 그럼에도 불구하고 "0"의 가능한 변형 목록을 갖는 것이 더 낫습니까, 아니면 그냥 모든 것을 테스트하는 것이 더 낫습니까?
전자는 틀림없이 빠르지만 합법적인 변형을 놓칠 위험이 있습니다.
그러나 CHARTEVENT_OBJECT_ENDEDIT 에서만 테스트해야 하는 경우 속도가 얼마나 중요 합니까?
그럼에도 불구하고, OP는 이제 계속할 일이 많다고 확신합니다!
흥미로운 연습입니다. 그럼에도 불구하고 "0"의 가능한 변형 목록을 갖는 것이 더 낫습니까, 아니면 그냥 모든 것을 테스트하는 것이 더 낫습니까?
전자는 틀림없이 빠르지만 합법적인 변형을 놓칠 위험이 있습니다.
그러나 CHARTEVENT_OBJECT_ENDEDIT 에서만 테스트해야 하는 경우 속도가 얼마나 중요합니까?
그럼에도 불구하고, OP는 이제 계속할 일이 많다고 확신합니다!
또는 정규식 사용 :-D
0을 "0"으로 입력하고 다른 모든 경우를 거부하도록 요청할 수도 있습니다.
또는 정규식 사용 :-D
개인적으로 다음과 같은 접근 방식을 취하고 있습니다.
ENDEDIT가 발생하면 OBJ_TEXT 를 double로 변환한 다음 편집 상자에 문자열로 다시 푸시합니다(형식을 제어 하려면 StringFormat() 사용). 사용자는 즉시 자신의 작업 결과를 보고 필요에 맞지 않으면 변경하거나 그대로 둡니다.
예
#define EDIT_BOX "EditBox"
int OnInit ()
{
ObjectCreate ( 0 , EDIT_BOX, OBJ_EDIT , 0 , 0 , 0 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XDISTANCE , 200 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YDISTANCE , 200 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XSIZE , 100 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YSIZE , 20 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_ALIGN , ALIGN_CENTER );
ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , "Enter Value" );
return ( INIT_SUCCEEDED );
}
void OnDeinit ( const int reason)
{
ObjectDelete ( 0 , EDIT_BOX);
}
void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
{
if (id== CHARTEVENT_OBJECT_ENDEDIT && sparam==EDIT_BOX)
{
double value = ( double ) ObjectGetString ( 0 , EDIT_BOX, OBJPROP_TEXT );
ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , ( string )value);
}
}
개인적으로 다음과 같은 접근 방식을 취하고 있습니다.
ENDEDIT가 발생하면 OBJ_TEXT 를 double로 변환한 다음 편집 상자에 문자열로 다시 푸시합니다(형식을 제어하려면 StringFormat() 사용). 사용자는 즉시 자신의 작업 결과를 보고 필요에 맞지 않으면 변경하거나 그대로 둡니다.
예
#define EDIT_BOX "EditBox"
int OnInit ()
{
ObjectCreate ( 0 , EDIT_BOX, OBJ_EDIT , 0 , 0 , 0 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XDISTANCE , 200 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YDISTANCE , 200 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_XSIZE , 100 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_YSIZE , 20 );
ObjectSetInteger ( 0 , EDIT_BOX, OBJPROP_ALIGN , ALIGN_CENTER );
ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , "Enter Value" );
return ( INIT_SUCCEEDED );
}
void OnDeinit ( const int reason)
{
ObjectDelete ( 0 , EDIT_BOX);
}
void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
{
if (id== CHARTEVENT_OBJECT_ENDEDIT && sparam==EDIT_BOX)
{
double value = ( double ) ObjectGetString ( 0 , EDIT_BOX, OBJPROP_TEXT );
ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , ( string )value);
}
}
입력을 검증할 방법이 필요합니다. (추가 버튼?)
간단하게 유지하세요. 어쨌든, 당신이 원하는대로 :p
입력을 검증할 방법이 필요합니다. (추가 버튼?)
팔로우 안하고...?
OP의 의도를 잘못 이해했을 수도 있지만 인터페이스가 동적일 것이라고 생각합니다. 즉, 이 편집 상자를 변경하면 그에 따라 다른 상자가 업데이트됩니다.
유효성 검사 버튼이 있을 수 있지만 결과가 단순히 표시되는 경우(작업이 아니라) 불필요한 추가일 수 있습니다. 그러나 확실하지 않습니다. OP는 명확히해야합니다.
간단하게 유지하세요. 어쨌든 원하는대로 :p
나는 일을 단순하게 유지하는 것에 매우 동의합니다. 이보다 더 간단해지나요?
ObjectSetString ( 0 , EDIT_BOX, OBJPROP_TEXT , ( string )value);
추신: 제가 원하는 대로 될지는 모르겠지만 저를 위한 학술적 토론일 뿐입니다. 필요 없습니다!
팔로우 안하고...?
...일반적인 요청으로 받아들인다면 "변수의 내용이 숫자인지 확인 하는 방법?", 가장 우아한 솔루션은 정규식을 사용하는 것입니다.