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

 
NoLimitations :

나는 또한 이것을 사용하려고 시도했지만 아무 소용이 없었습니다. 아마도 DTS는 실제 값이 아닌 모양에 대한 값의 정확도를 단순히 변경합니까? 다른 옵션이 보이지 않습니다.

예, 문자열이 인쇄 가능한 버전의 값을 double로 만드는 것뿐이라고 생각하지만 변경하지는 않습니다. MQL에서 수행하는 방법은 확실하지 않지만 Java에서는 한 유형에서 다른 유형으로(이 경우 double에서 int로) 유형 변환을 강제할 수 있다는 것을 알고 있습니다.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html 의 oracle 문서에서. 이것은 제시된 코드의 일부일 뿐입니다.

 // Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = ( int ) 12.5 f;
// String conversion (5.4) of i's int value:
System. out .println( "(int)12.5f==" + i);

귀하의 경우 다음과 같이 말할 것이라고 믿습니다.

 int intConvertedDouble = ( int ) valueYouGotItFrom;

분명히 코드에 더 잘 맞도록 이름을 조정해야 합니다.

http://www.studytonight.com/java/type-casting-in-java 도 거기에서 다룹니다. Java와 MQL은 모두 C++를 기반으로 하기 때문에 이것이 도움이 될 수 있습니다.

 

@OP 및 이전에 게시된 모든 MQL4 링크 읽기는 Double 및 PrintFormat 작업 참조

@JD4 Java 코드를 게시하고 Java 사양을 참조하는 것이 OP에 어떻게 도움이 되는지 모르겠습니다. 또한 Java와 C++은 비슷하지만 C++ 기반이라는 데 동의하지 않습니다.

도움이 되려고 노력하고 있지만 스스로 답을 확신할 수 없을 때 하는 많은 답변이 도움을 찾는 사람들에게 혼란을 줄 뿐이라고 생각합니다.

 
ydrol :

@OP 및 이전에 게시된 모든 MQL4 링크 읽기는 Double 및 PrintFormat 작업 참조

@JD4 Java 코드를 게시하고 Java 사양을 참조하는 것이 OP에 어떻게 도움이 되는지 모르겠습니다. 또한 Java와 C++은 비슷하지만 C++ 기반이라는 데 동의하지 않습니다.

도움이 되려고 노력하고 있지만 스스로 답을 확신할 수 없을 때 하는 많은 답변이 도움을 찾는 사람들에게 혼란을 줄 뿐이라고 생각합니다.

C++에 대한 생각과 관련하여 https://www.mql5.com/en/docs/basis 를 살펴보십시오. 바로 거기에 있고 MQL4를 MQL5( https://docs.mql4.com/mql4changes )와 유사하게 수정했기 때문에 여기에도 적용됩니다. 내 지식 기반에 관해서는 전문가라고 주장한 적이 없으며, 내가 게시할 때 적어도 내가 무언가를 확신하지 못하면 때때로 놓칠 수 있음을 사람들에게 알립니다. 내가 Chevy를 운전하고 문제가 있는 경우, 돈에 맞지 않을지라도 도움이 되는 조언이라면 거기 앉아서 Fords에서만 일하는 사람의 조언을 할인하지 않을 것입니다. 나는 또한 거기 앉아서 그들이 도움을 주려고 노력한다면 당신이 도울 수 있다고 생각하지 않는다고 말하지 않을 것입니다.
 

제 글을 잘못 읽으신 것 같아요. Mql4 OO는 확실히 C++를 기반으로 합니다. 나는 그것에 대해 이의가 없다고 생각한다. 나는 당신의 주장을 언급하고 있었습니다:

JD4 : Since Java and MQL are both supposed to be based on C++ , this might help you out.

많은 Java 참조가 뒤따릅니다. 나는 말했다 -

ydrol : Java 와 C++도 비슷하지만 C++ 기반이라는 점에 동의하지 않습니다.

나는 당신의 자바 레퍼런스에 대해 구체적으로 이야기하고 있었습니다. Java는 제 생각에 C++를 기반으로 하지 않습니다.

어쨌든 부동 소수점으로 소수를 표현하는 주제는 WHRoeder가 이전에 언급한 스레드 에서 여러 번 다루어졌습니다.

OP가 소수점 이하 두 자리로 반올림하려는 것처럼 보이지만 출력이나 특정 예제를 게시하지 않고 보고 있는 반올림 오류의 정도는 무시할 수 있습니다.

 
JD4 : 그것에 대한 문서 페이지에 따르지 않습니다. https://docs.mql4.com/math/mathround
NoLimitations : JD4가 맞습니다. 문서 페이지에는 가장 가까운 정수로 반올림한다고 나와 있습니다.

둘 다 틀렸어. 가장 가까운 정수로 반올림합니다. 관련 없음 . 더블을 반환합니다. 1 = 1.0 = 1.00 = 1.00000 = 1.00000000000000000000000000000000 무한 숫자

부동 소수점에 대해 알아봅니다. == 피연산자. - MQL4 포럼



 

WH가 돌아가서 다시 읽을 필요가 있다고 생각하십시오. 실제로 수행하는 작업이 아니라 페이지에서 해당 기능이 수행한 작업을 말한 것입니다. 그리고 컴퓨터 프로그래밍은 데이터 유형과 관련하여 (int) 1 != (더블) 1.00000000(무한대)인 몇 안 되는 곳 중 하나입니다.


@ ydrol, MQL/Java/C++에 대한 진술에서 의도의 방향을 놓쳤습니다. 프로그래밍 언어로서의 Java의 기원과 관련하여 살펴볼 몇 가지 참조 자료입니다.

https://en.wikipedia.org/wiki/Java_(프로그래밍_언어)

http://www.freejavaguide.com/history.html

둘 다 C++와 관련하여 거의 똑같은 것을 말하므로 wiki에서 게시할 예정입니다. "이 언어는 구문 의 대부분을 CC++ 에서 파생하지만 둘 중 하나보다 낮은 수준 의 기능이 더 적습니다."

 

같은 시대부터 " 언어의 구문은 표면 형태를 정의합니다." ( 중괄호 등). 이 스레드에서 논의되는 것은 구문과 관련이 없습니다. 내 의견은 MQL과 같은 방식으로 'Java는 C++에 기반을 두고 있다'고 말하는 것이 내가 동의하지 않는 훨씬 더 강력한 진술이라는 것입니다 .

그러나 그것은 질적 진술이기 때문에 우리는 동시에 옳고 그름을 둘 다 가질 수 있습니다. 여전히 문제와 함께 특정 링크가 이미 제공되고 구문 관련 질문이 아닌 경우 Java 사양이 OP에 어떻게 도움이 되는지 알 수 없습니다.

언급한 두 기사 모두 Java는 구문에서 차용하지만 그 외에는 거의 없습니다. 이것은 구문과 관련된 문제가 아닙니다.

그러나 그것은 관련   MQL에서 사용하는 IEEE 754 부동 소수점 표현으로, 언어에서도 공유됩니다. (그리고 구문과 같은 c가 없는 많은 다른 것들 - 예를 들어 Pascal 또는 Excel과 같은 응용 프로그램 ) 이것은 실제로 언어의 구문적 유사성보다는 대부분의 CPU/FPU에서 지원하는 표준이기 때문입니다. 문제는 소수의 부동 소수점 표현에 작은 오류가 있다는 것입니다. OP는 소수점 이하 두 자리까지 반올림하려고 합니다. IEEE 754 형식 1/10(0.1) 또는 1/100(0.01)을 정확하게 저장할 수 없습니다. IEEE 754 이진 형식 에서 이들은 순환 이진 분수입니다. (1/3이 순환 소수 소수 0.33333... ) - 의도한 숫자와 실제 숫자 사이의 차이는 매우 작습니다(예: 0.00000000000001 ). 충분히 그렇게

1/10 != 0.1 // 아마도

그리고 int(0.1 * 10)은 잘못된 방향으로 반올림할 수 있습니다.

그러나 OP는 그들이 보고 있는 것을 정확히 게시하지 않았으므로 이 주제의 세 번째 게시물에서 최고의 조언을 얻었으므로 MQL 스레드로 이동하여 읽으십시오. MQL 스레드가 제공된 후에도 Java 사양을 읽고 Java에 익숙하지 않을 가능성이 높다고 제안하는 것도 의미가 없습니다.

스레드 요약:

  • OP : 숫자가 이상하게 행동하고 있습니다.
  • WHRoeader: 부동 소수점이 이상한 이유에 대한 몇 가지 설명이 포함된 몇 가지 링크가 있습니다. < 답은 여기 어딘가에 있습니다 . . .
  • OP: 알겠습니다. 숫자는 여전히 재미있습니다.
  • JD4: MQL4 및 Java는 C++를 기반으로 합니다. 여기에 유형 캐스팅 및 프로모션에 대한 몇 가지 애매한 Java 링크가 있습니다. Java 개발자도 어렵게 읽을 수 있습니다.
  • ydrol: 정확히 OP에 어떻게 도움이 되나요? 나는 Java가 C++를 기반으로 한다는 것에 동의하지 않습니다. 답변이 얼마 전에 게시되었습니다...
  • 등 등

 
두 가지 이유로 Java 유형 변환 방법을 게시했습니다. 첫째는 내가 Java에 더 익숙하기 때문입니다. 그리고 2, 코드 검색을 해봤는데 하다보면 피곤해서 MQL 문서에서 하는 방법을 못 봤네요. 그래서 도움이 되기 위해 MQL과 Java가 공통 언어인 C++에 대한 공유 비교를 고려할 때 충분히 가깝다는 가정을 기반으로 합리적으로 작동할 것이라고 확신하는 가능한 솔루션을 제안했습니다.
 
JD4 : WH가 돌아가서 다시 읽어야 한다고 생각하세요. 실제로 하는 일이 아니라 페이지에서 그 기능이 하는 일을 말한 것입니다.
  1. 돌아가서 질문이 무엇인지 다시 읽어야 할 수도 있습니다.
    NoLimitations : MathRound()를 사용하는 경우에도 소수점 이하 자릿수에 대한 답을 얻는 이유는 무엇입니까?
    페이지가 말하는 것은 그것이 하는 일입니다. 반올림합니다. 여러 소수 자릿수 질문과 관련이 없습니다.
  2. 여러 소수 자릿수는 필요한 숫자를 지정하지 않고 double을 인쇄할 때 발생합니다.
 
WHRoeder :
JD4 : WH가 돌아가서 다시 읽어야 한다고 생각하세요. 실제로 하는 일이 아니라 페이지에서 그 기능이 하는 일을 말한 것입니다.
  1. 돌아가서 질문이 무엇인지 다시 읽어야 할 수도 있습니다.
    NoLimitations : MathRound()를 사용하는 경우에도 소수점 이하 자릿수에 대한 답을 얻는 이유는 무엇입니까?
    페이지가 말하는 것은 그것이 하는 일입니다. 반올림합니다. 여러 소수 자릿수 질문과 관련이 없습니다.
  2. 여러 소수 자릿수는 필요한 숫자를 지정하지 않고 double을 인쇄할 때 발생합니다.

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

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

" 반환 값

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

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

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

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

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