음수 값을 반환하는 위치 크기 - 페이지 3

 
JD4 :

위는 귀하의 특정 게시물에 대한 특정 응답이었습니다. " MathRound는 double을 반환합니다. 소수점 이하 자릿수는 무한합니다. "

다시 한번, 문서 페이지에 따르면.

" 반환 값

가장 가까운 정수로 반올림된 값입니다. "

이제 게시물의 이 부분에 대한 특정 응답입니다.

" 페이지가 말하는 것은 그것이 하는 일입니다. 반올림됩니다. 여러 소수 자릿수 질문과 관련이 없습니다. "

다시 인용문을 다시 읽으면 "가장 가까운 정수로 반올림된 값" 을 반환한다고 나와 있습니다. 정수는 정의에 따라 소수점 이하 자릿수가 없는 정수입니다. 그리고 이것이 실제로 실제로 하는 일이 아니라면 코드나 설명이 깨져 하나 또는 다른 하나 또는 둘 모두 MQ에 의해 수정되어야 하거나 그렇지 않으면 이러한 기능이 다음과 같이 수행되지 않는다는 경고 레이블이 필요합니다. 광고.

실제로 제공된 유형을 반환하지만 가장 가까운 정수 값과 수학적으로 동등하지만(1.23456에서 1.00000을 반환하고 1 == 1.00000) 실제 정수 유형을 반환하지 않는 경우 참조 페이지는 다음을 수행해야 합니다. "기본 데이터 유형을 변경하지 않음" 또는 명확하게 명시된 다른 방법과 같은 것을 지정합니다. 나는 이것이 원래 러시아어 페이지의 평면 번역이라고 생각합니다. 따라서 영어로 해야 하는 것만큼 명확하지 않습니다.

MetaQuotes 문서는 기껏해야 약합니다.

그러나 MathRound() 는 정의에 따라 double을 반환합니다.

반환된 값이 "값을 2로 나눈 값"이라고 읽는 경우에도 여전히 double입니다.

"가장 가까운 정수로 반올림된 값"이 여전히 double인 것과 같은 방식입니다.

도움이 되기를 바랍니다.

 
honest_knave :

MetaQuotes 문서는 기껏해야 약합니다.

그러나 MathRound() 는 정의에 따라 double을 반환합니다.

반환된 값이 "값을 2로 나눈 값"이라고 읽는 경우에도 여전히 double입니다.

"가장 가까운 정수로 반올림된 값"이 여전히 double인 것과 같은 방식입니다.

도움이 되기를 바랍니다.

나에게 "가장 가까운 정수로 반올림된 값"은 정수의 정의 때문에 정수 이외의 다른 것을 반환한다는 것이 명확하지 않습니다. 그것이 실제로 작동하는 방식이라는 것을 알지만 코드 및/또는 공식 페이지 문구가 깨져 수정해야 한다는 점을 강조했습니다. int 유형을 반환하도록 코드를 조정하거나 페이지 문구를 변경해야 합니다. 사용자인 우리는 그렇게 할 수 없습니다. 반올림할 숫자를 얻는 값은 해당 변수에 다시 할당하지 않는 한 변경되지 않습니다. y를 값 1.3으로 반올림하고 위의 표현을 사용하여 x에 배치하는 경우와 같이 함수가 완료된 후 y에는 여전히 1.3이 포함되고 x에는 1.0이 아닌 1이 포함될 것으로 예상할 수 있습니다. 내 생각에, 그리고 내가 그것을 어떻게 읽고 있는지 반올림은 반올림하려는 가장 가까운 항목으로 반올림한다는 것을 의미하며 해당 항목에 해당하는 값이 아닙니다. 아마도 "번역에서 무언가가 손실되었습니다"라는 문구가 여기에서 매우 적절할 것입니다.
 
JD4 :
나에게 "가장 가까운 정수로 반올림된 값"은 정수의 정의 때문에 정수 이외의 다른 것을 반환한다는 것이 명확하지 않습니다. 그것이 실제로 작동하는 방식이라는 것을 알지만 코드 및/또는 공식 페이지 문구가 깨져 수정해야 한다는 점을 강조했습니다. int 유형을 반환하도록 코드를 조정하거나 페이지 문구를 변경해야 합니다. 사용자인 우리는 그렇게 할 수 없습니다. 반올림할 숫자를 얻는 값은 해당 변수에 다시 할당하지 않는 한 변경되지 않습니다. y를 값 1.3으로 반올림하고 위의 표현을 사용하여 x에 배치하는 경우와 같이 함수가 완료된 후 y에는 여전히 1.3이 포함되고 x에는 1.0이 아닌 1이 포함될 것으로 예상할 수 있습니다. 내 생각에, 그리고 내가 그것을 어떻게 읽고 있는지 반올림은 반올림하려는 가장 가까운 항목으로 반올림한다는 것을 의미하며 해당 항목에 해당하는 값이 아닙니다. 아마도 "번역에서 무언가가 손실되었습니다"라는 문구가 여기에서 매우 적절할 것입니다.

나는 문서의 팬이 아니지만, 나는 그들이 이 점에서 일관성이 있다고 생각한다고 말해야 합니다. 모든 문서는 페이지 상단에 반환된 데이터 유형(int, double, bool 등)을 나열하고 나중에 반환된 값 섹션은 이 데이터 유형을 반복하지 않습니다. 또한 이 경우 입력되는 것과 정확히 동일한 데이터 유형을 반환합니다.

어쨌든 #property 엄격한 컴파일러 지시문을 사용하는 경우 경고를 받아야 합니다.

 
honest_knave :

나는 문서의 팬이 아니지만, 나는 그들이 이 점에서 일관성이 있다고 생각한다고 말해야 합니다. 모든 문서는 페이지 상단에 반환된 데이터 유형(int, double, bool 등)을 나열하고 나중에 반환된 값 섹션은 이 데이터 유형을 반복하지 않습니다. 또한 이 경우 입력되는 것과 정확히 동일한 데이터 유형을 반환합니다.

어쨌든 #property 엄격한 컴파일러 지시문을 사용하는 경우 경고를 받아야 합니다.


https://www.mql5.com/en/forum/61394 에서 MQL5.com 포럼에 스레드를 시작했는데 궁극적으로 이 문서 문제에 도움이 될 것입니다. 아이디어를 뒷받침하는 사람이 충분하다면 MQ는 지금까지 많은 사람들이 문제였던 문제를 해결하는 데 모두 도움이 될 것입니다. MQ가 아이디어에 동의하기를 바랍니다. 사용자는 아무것도 변경할 수 없기 때문입니다.

@ knave & WH - 나는 당신의 예에 전적으로 동의하지만, 여기서 여전히 문제를 보고 있습니다. 내가 명확하게 설명하지 않거나 그렇지 않으면 나는 이것을 문제로 보고 있는 소수의 사람들 중 하나입니다. 나에게 당신의 예는 당신이 생각하는 것보다 이 주제에 대한 나의 입장을 증명하고 있습니다.

knave, 반환해야 하는 데이터 유형, int를 반환하지 않기 때문에 예제에서 오류 반환합니다. 변수를 int로 캐스팅한다는 사실은 함수가 제대로 작동하지 않는 문제를 더 쉽게 볼 수 있게 해줍니다.

WH, 당신은 (doc 페이지에서) 그 줄을 지적하고 그것은 기본적으로 내가 강조하고 있는 줄과 같은 것을 말하고 있습니다. 이 예제에서는 함수에 전송 되는 값으로 double만 사용합니다. 귀하의 게시물 중 어느 것도 함수에서 반환 데이터 유형이 double임을 100% 명확하게 명시하지 않았으며 예제에서는 double을 보내고 있다는 것만 보여줍니다.

반올림은 일반적으로 특정 숫자의 값을 더 낮은 정밀도로 변경하는 데 사용됩니다. 나는 이것에 대해 우리 모두가 동의할 수 있다고 생각합니다.

이 경우에도 다르지 않습니다. 페이지는 "지정된 숫자 값의 가장 가까운 정수로 반올림"을 지정합니다. 다른 값에서 더 낮은 정밀도(int)로 반올림한다고 읽습니다. 사용된 예에서는 double이 전송됩니다. 그것이 100% 분명한 전부입니다.

 

미안해 JD4 너 완전히 날 잃어버렸어...

JD4 :

귀하의 게시물 중 어느 것도 함수에서 반환 데이터 유형이 double임을 100% 명확하게 명시하지 않았으며 예제가 double을 보내고 있다는 것만 보여줍니다.

화살표로 표시한 것이 바로 그것입니다. 이중(큰 빨간색 화살표)을 반환하고 전달된 매개변수도 이중(내 화살표 아래)입니다. 어떤 기능이든 살펴보세요. OrderSend()int 를 반환하고 ... OrderClose()bool 을 반환하고 .... MathRound()double 을 반환합니다.

JD4 :

knave, 반환해야 하는 데이터 유형, int를 반환하지 않기 때문에 예제에서 오류 반환합니다. 변수를 int로 캐스팅한다는 사실은 함수가 제대로 작동하지 않는 문제를 더 쉽게 볼 수 있게 해줍니다.

기능은 광고된 대로 정확하게 작동합니다.

int(잘못된)라고 생각하면 다음을 얻습니다.

int로 typecast하면 잘못된 데이터 유형을 사용하고 있음을 인정합니다.

이중으로 취급하면(즉) 경고가 표시되지 않습니다.

 
honest_knave :

미안해 JD4 너 완전히 날 잃어버렸어...

화살표로 표시한 것이 바로 그것입니다. 이중(큰 빨간색 화살표)을 반환하고 전달된 매개변수도 이중(내 화살표 아래)입니다. 어떤 기능이든 살펴보세요. OrderSend()int 를 반환합니다. OrderClose()bool 을 반환하고 .... MathRound()double 을 반환합니다.

기능은 광고된 대로 정확하게 작동합니다.

int(잘못된)라고 생각하면 다음을 얻습니다.


int로 typecast하면 잘못된 데이터 유형을 사용하고 있음을 인정합니다.


이중으로 취급하면(즉) 경고가 표시되지 않습니다.

예제는 double을 반환하는 typecasting입니다. int RoundedNumber의 코드 예제에서 반환 유형으로 int를 반환하기 위해 유형 캐스팅하고 있습니다. 페이지에서 알려주는 내용에 따라 int를 반환해야 하므로 필요하지 않습니다. 맨 위에 있는 줄과 반환 값에 있는 줄은 지정된 값의 정수로 반올림한다고 말합니다. 정수는 아무리 많이 다르게 말하더라도 소수 자릿수, 분수 또는 정수, 0 및 음의 정수 사이에 숫자를 나타내는 다른 방법이 없습니다. 위에 게시한 예제와 같이 주어진 문서를 기반으로 MathRound 함수 "1.3"을 전송하면 "1.0"이 정수가 아니라 "1"이 정수이므로 "1.0"이 아니라 "1"을 반환해야 합니다. (설명을 위한 인용문)

int로 타입캐스팅하면 기본 함수가 int 이외의 다른 값을 반환해야 하기 때문이 아니라 페이지에서 말하는 것과 반대로 작동하기 때문에 오류가 표시됩니다. 이중으로 처리하면(일 수도 있지만 그렇게 해서는 안 됨) 잘못된 함수가 문서화된 작업에 카운터를 계속 작동하도록 하고 보낸 값에서 반올림된 정수를 반환합니다. 그것에, 그것은 이중입니다.

(코드가 지금 문서화된 방식으로) 반올림되도록 double을 정수로 보낸 다음 반환된 값을 double 형식으로 캐스팅하거나 저장하면 int를 반환해야 하기 때문에 오류가 발생하지 않고 int를 저장하면 오류가 발생하지 않습니다. double로 변환하면 변환의 정밀도가 손실되지 않습니다. 오류는 프로그래머에게 계산의 정밀도 손실 가능성에 대해 알리기 위한 것입니다. double을 int에 저장하는 경우 이전보다 정확도가 낮은 다른 형식으로 강제 변환하기 때문에 표시되는 것과 같은 오류가 예상됩니다.

MathRound 함수가 int를 반환하지 않아야 하는 경우 int를 반환해야 한다고 표시되지 않도록 페이지의 문구를 변경해야 합니다. 내 문제는 페이지에서 수행해야 하는 작업에 반대되는 기능 외에는 기능이 수행하는 것과 다른 기능을 수행하는 것과 관련된 것이 아닙니다. 그들은 함수에 대한 코드를 수정하여 문서 페이지가 말하는 대로 int를 반환하거나 문서 페이지가 반드시 int를 반환하지 않는다는 것을 반영하도록 편집해야 합니다. "가장 가까운 정수로 반올림"은 정확히 정수입니다.

편집: MQL은 C++에 기반을 두고 있고 구문적으로 Java 및 C++와 유사하기 때문에 C++ 및 Java 참조를 통해 추가 연구를 수행했습니다. C++는 문서의 한 부분( http://www.cplusplus.com/reference/cmath/round/ )에 표시됩니다. " 가장 가까운 값으로 반올림 x에 가장 가까운 정수 값을 반환하고 중간 경우는 0에서 반올림합니다." 그러나 나중에 페이지에 "가장 가까운 정수로 반올림된 x의 값을 반환합니다 (부동 소수점 값으로)."라고 표시됩니다. C++에서 float를 반환하도록 지정하기 때문에 실제로는 그렇지 않지만 이것이 이에 대한 귀하의 견해를 지원한다고 말할 수 있습니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html 의 Java 설명서는 round라는 2개의 메서드에 대해 다음을 보여줍니다. 둘 다(Java 및 C++) 해당 언어 내에서 MQL의 MathRound 및/또는 라운드 함수와 기능적으로 동일합니다.

정적 긴 라운드 (더블 a)
인수에 가장 가까운 long을 반환하고 동률은 반올림합니다.
정적 정수 둥근 (플로트 a)
인수에 가장 가까운 int를 반환하고 동률은 반올림합니다.
 

MQL MathRound는 부동 소수점 데이터 유형의 정수 값을 리턴합니다. 확실히 C++ 또는 Java 반올림 함수 가 하는 일은 관련이 없습니다. 원하는 경우 MQL에 고유한 'int round(double a)' 함수를 작성하는 것은 간단합니다.

(32비트) 부동 소수점은 정밀도 손실 없이 (16비트) 정수를 잘 유지할 수 있습니다. 문제는 OP가 소수점 이하 두 자리로 반올림된 값을 원하고 정확할 것으로 기대한다는 것입니다. 그렇지 않을 것이다.

 
ydrol :

MQL MathRound는 부동 소수점 데이터 유형의 정수 값을 리턴합니다. 확실히 C++ 또는 Java 반올림 함수가 하는 일은 관련이 없습니다. 원하는 경우 MQL에 고유한 'int round(double a)' 함수를 작성하는 것은 간단합니다.

(32비트) 부동 소수점은 정밀도 손실 없이 (16비트) 정수를 잘 유지할 수 있습니다. 문제는 OP가 소수점 이하 두 자리로 반올림된 값을 원하고 정확할 것으로 기대한다는 것입니다. 그렇지 않을 것이다.

특정 방식으로 작동하는 기능에 대한 게시물로 주제를 벗어났고, 스레드를 벗어난 주제 토론을 게시하는 작업을 마쳤습니다. 이 기능에 대한 논의가 다른 곳으로 옮겨가더라도 저는 괜찮습니다.

편집: https://www.mql5.com/en/forum/156174 에서 이 충돌하는 문서 페이지에 대한 지속적인 토론을 위해 스레드를 시작했습니다. Gum, 나는 그 스레드에 대한 아래 게시물에 응답했습니다.
 

JD4 이거 헷갈리는 사람은 너밖에 없는듯

HonestKnave는 문서에서 함수 가 double을 반환한다는 것을 분명히 보여주고 있다고 지적했습니다. double로 표시되는 정수입니다.

"가장 가까운 정수로 반올림"이 정수로 변환된다는 의미는 아닙니다.

나무 조각을 실과 같은 길이로 자르라고 한다면. 나무는 여전히 나무로 남아 있으며 갑자기 끈으로 바뀌지 않습니다.

 
JD4 :

맨 위에 있는 줄과 반환 값에 있는 줄은 지정된 값의 정수로 반올림한다고 말합니다.

JD4 :

문서 페이지에서 말하는 대로 int를 반환하도록 함수에 대한 코드를 수정하거나 int를 반드시 반환하지 않는다는 점을 반영하도록 문서 페이지를 편집해야 합니다. "가장 가까운 정수로 반올림"은 정확히 정수입니다.


글쎄요, 무엇이 JD4를 설득할 수 있을지 모르겠습니다. 문서에는 100% 함수가 double을 반환한다고 명시되어 있습니다. 반환된 값에 대한 설명에서 다른 내용을 읽고 있습니다. 정수를 반환한다고 명시되어 있지 않습니다.

OrderSend()를 보면 "반환된 값: 거래 서버가 주문에 할당한 티켓 번호를 반환하거나 실패하면 -1을 반환합니다. 추가 오류 정보를 얻으려면 GetLastError() 함수 를 호출해야 합니다."

그렇다면 숫자는 무엇을 의미합니까? 그건 좀 모호하지 않나요? 그들은 두 배를 의미합니까? 뜨다? 숯? 짧은? 인? 긴? 답은 이전에 게시한 큰 화살표와 같이 페이지 상단에 있습니다. 이것이 반환된 데이터 유형 을 볼 수 있는 표준 형식입니다. (참고로 나는 반환된 데이터 을 말하지 않았다). 문서에서 "반환된 값" 섹션이 데이터 유형 을 언급한 단일 예를 정말로 생각할 수 없습니다.

사유: