Double 대 FLOAT - 이해할 수 없는 MathFloor 오류 - 페이지 7 1234567 새 코멘트 Vladislav Andruschenko 2017.02.27 08:03 #61 Maxim Kuznetsov : 목표에 따라 때로는 완전히 정수로 전환할 가치가 있습니다. 신경이 많이 쓰입니다 :-) 어쩐지 여러 레벨을 정확하게 표시해야 하는 작업이 있었는데 처음에는 더블에 지쳐서 0에서 전체 포인트로 모든 것을 옮기고 모든 것이 쉽고 간단하고 쉬워졌습니다. 오류 없이. 그게 바로 내가 한 일이다. 정수로 변환됩니다. Vladislav Andruschenko 2017.02.27 08:30 #62 Vladimir : 작업에 필요한 경우가 아니면 반올림을 사용하지 마십시오. 문제의 사실은 작업이 다르다는 것입니다 :-) Taras Slobodyanik 2017.02.27 09:59 #63 반올림에 MathFloor 또는 MathCeil 을 사용하는 경우 원래 결과를 원하는 정확도로 정규화해야 합니다. 계산할 때 정수 대신 분수가 나올 수 있고 이 "꼬리" 때문에 숫자가 잘못 반올림 되어 결과가 올바르지 않습니다. 예를 들어: double point= 0.01 ; Print ( DoubleToStr ( 1156.12 /point, 15 )); Print ( NormalizeDouble ( 1156.12 /point, _Digits )); 이제 MathFloor 로 반올림해 보겠습니다. double point= 0.01 ; Print ( DoubleToStr ( MathFloor ( 1156.12 /point), 15 )); Print ( MathFloor ( NormalizeDouble ( 1156.12 /point, _Digits ))); Double vs FLOAT - Normalization of doubles 전문 고문 - 기타 Vladislav Andruschenko 2017.02.27 10:02 #64 숫자 1.05를 정규화하면 기본적으로 MathFloor 함수인 1.1로 정규화됩니다. 필요한 값이 아닌 값을 반환합니다 :-) 나는 MathFloor를 전혀 사용하지 않을 것이기 때문입니다. 하지만 과제는 다릅니다. Taras Slobodyanik 2017.02.27 10:07 #65 Но задача то другая. 왜 또? 방금 결과를 반올림해야 한다고 썼습니다. MathFloor는 바로 그 작업을 수행합니다. Vladislav Andruschenko 2017.02.27 10:09 #66 Taras Slobodyanik : 왜 또? 방금 결과를 반올림해야 한다고 썼습니다. MathFloor는 바로 그 작업을 수행합니다. 예!!! 하지만 정규화를 수행하면 수학에서 반올림되고 MathFloor 는 더 이상 의미가 없습니다. Taras Slobodyanik 2017.02.27 10:22 #67 숫자가 1156.12인 예제 바로 위에 이 숫자는 1156.119999999999891로 메모리에 저장됩니다. 즉, 정수로 변환을 통해 100분의 1 단위로 반올림하려고 하면 1156.12 대신 1156.11이라는 숫자를 얻게 됩니다. 이것이 "기능"이기 때문에 의아해합니다. Vladislav Andruschenko 2017.02.27 10:23 #68 Taras Slobodyanik : 숫자가 1156.12인 예제 바로 위에 이 숫자는 1156.119999999999891로 메모리에 저장됩니다. 즉, 정수로 변환을 통해 100분의 1 단위로 반올림하려고 하면 1156.12 대신 1156.11이라는 숫자를 얻게 됩니다. 이것이 "기능"이기 때문에 의아해합니다. 네 감사합니다. 1234567 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
목표에 따라 때로는 완전히 정수로 전환할 가치가 있습니다. 신경이 많이 쓰입니다 :-) 어쩐지 여러 레벨을 정확하게 표시해야 하는 작업이 있었는데 처음에는 더블에 지쳐서 0에서 전체 포인트로 모든 것을 옮기고 모든 것이 쉽고 간단하고 쉬워졌습니다. 오류 없이.
작업에 필요한 경우가 아니면 반올림을 사용하지 마십시오.
문제의 사실은 작업이 다르다는 것입니다 :-)
반올림에 MathFloor 또는 MathCeil 을 사용하는 경우 원래 결과를 원하는 정확도로 정규화해야 합니다.
계산할 때 정수 대신 분수가 나올 수 있고 이 "꼬리" 때문에 숫자가 잘못 반올림 되어 결과가 올바르지 않습니다.
예를 들어:
Print ( DoubleToStr ( 1156.12 /point, 15 ));
Print ( NormalizeDouble ( 1156.12 /point, _Digits ));
이제 MathFloor 로 반올림해 보겠습니다.
Print ( DoubleToStr ( MathFloor ( 1156.12 /point), 15 ));
Print ( MathFloor ( NormalizeDouble ( 1156.12 /point, _Digits )));
숫자 1.05를 정규화하면 기본적으로 MathFloor 함수인 1.1로 정규화됩니다. 필요한 값이 아닌 값을 반환합니다 :-)
나는 MathFloor를 전혀 사용하지 않을 것이기 때문입니다.
하지만 과제는 다릅니다.
Но задача то другая.
왜 또? 방금 결과를 반올림해야 한다고 썼습니다. MathFloor는 바로 그 작업을 수행합니다.
왜 또? 방금 결과를 반올림해야 한다고 썼습니다. MathFloor는 바로 그 작업을 수행합니다.
예!!! 하지만 정규화를 수행하면 수학에서 반올림되고 MathFloor 는 더 이상 의미가 없습니다.
숫자가 1156.12인 예제 바로 위에 이 숫자는 1156.119999999999891로 메모리에 저장됩니다.
즉, 정수로 변환을 통해 100분의 1 단위로 반올림하려고 하면 1156.12 대신 1156.11이라는 숫자를 얻게 됩니다. 이것이 "기능"이기 때문에 의아해합니다.
숫자가 1156.12인 예제 바로 위에 이 숫자는 1156.119999999999891로 메모리에 저장됩니다.
즉, 정수로 변환을 통해 100분의 1 단위로 반올림하려고 하면 1156.12 대신 1156.11이라는 숫자를 얻게 됩니다. 이것이 "기능"이기 때문에 의아해합니다.
네 감사합니다.