NormalizeDouble을 사용하여 MT4에서 숫자 반올림 - 페이지 9

 
Алексей Тарабанов :
반올림에 대한 8페이지. 초등학교 4학년 때 수강했던 것 같습니다. :(
포경수술에 관한 것입니다 :)
 
Алексей Тарабанов :
반올림에 대한 8페이지. 초등학교 4학년 때 했던 것 같습니다. :(
전부는 아닙니다 ;|
 
Dmitry Fedoseev :
헤. 이것은 잘못된 경로입니다. 완전히 잘못된 결과입니다.
예를 들어?
 
lilita bogachkova :

++++

사실, 숫자가 소수점 이하 15자리보다 길면 어쨌든 어떻게든 잘라야 합니다. 그렇지 않으면 올바르게 작동하지 않습니다.

배정밀도 부동 소수점 숫자는 15-17 십진수의 정밀도를 제공합니다.
 
Vasyl Nosal :
배정밀도 부동 소수점 숫자는 15-17 십진수의 정밀도를 제공합니다.
 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   ushort   Characters_delete= 14 ;
   for ( int i= 0 ;i<=Characters_delete;i++)
     {
       double v1= 1.123456789012345 ;

      v1=DoubleCrop(v1,i,Characters_delete);

       Print ( "v1 = " ,i, " = " , DoubleToString (v1,Characters_delete-i));
     }
   Print ( "---" );
  }
//+------------------------------------------------------------------+
//| Double Crop function                                             |
//+------------------------------------------------------------------+
double DoubleCrop( double value, int ii, ushort   Characters)
  {
   string data= "" ,resoult= "" ;
   data= DoubleToString (value,Characters);
   resoult= StringSubstr (data, 0 , StringLen (data)-ii);
   return StringToDouble (resoult);
  }
//+------------------------------------------------------------------+
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 0 = 1.12345678901235
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 1 = 1.1234567890123
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 2 = 1.123456789012
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 3 = 1.12345678901
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 4 = 1.1234567890
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 5 = 1.123456789
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 6 = 1.12345678
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 7 = 1.1234567
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 8 = 1.123456
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 9 = 1.12345
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 10 = 1.1234
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 11 = 1.123
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 12 = 1.12
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 13 = 1.1

0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 14 = 1

   ushort   Characters_delete= 15 ;

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 0 = 1.123456789012345

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 1 = 1.12345678901234

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 2 = 1.1234567890123

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 3 = 1.123456789012

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 4 = 1.12345678901

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 5 = 1.1234567890

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 6 = 1.123456789

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 7 = 1.12345678

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 8 = 1.1234567

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 9 = 1.123456

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 10 = 1.12345

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 11 = 1.1234

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 12 = 1.123

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 13 = 1.12

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 14 = 1.1

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 15 = 1

   ushort   Characters_delete= 15 ;
   for ( int i= 0 ;i<=Characters_delete;i++)
     {
       double v1= 1.1234567890123456 ;

      v1=DoubleCrop(v1,i,Characters_delete);

       Print ( "v1 = " ,i, " = " , DoubleToString (v1,Characters_delete-i));
     }
   Print ( "---" );
  }

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 0 = 1.123456789012346

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 1 = 1.12345678901234

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 2 = 1.1234567890123

0 22:02:48.826 ! GBPUSDbc,H1 테스트: v1 = 3 = 1.123456789012

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 4 = 1.12345678901

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 5 = 1.1234567890

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 6 = 1.123456789

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 7 = 1.12345678

0 22:02:48.826 ! GBPUSDbc,H1 테스트: v1 = 8 = 1.1234567

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 9 = 1.123456

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 10 = 1.12345

0 22:02:48.826 ! 테스트 GBPUSDbc,H1: v1 = 11 = 1.1234

0 22:02:48.826 ! GBPUSDbc,H1 테스트: v1 = 12 = 1.123

0 22:02:48.826 ! GBPUSDbc,H1 테스트: v1 = 13 = 1.12

0 22:02:48.826 ! GBPUSDbc,H1 테스트: v1 = 14 = 1.1

0 22:02:48.826 ! GBPUSDbc,H1 테스트: v1 = 15 = 1

 
lilita bogachkova :
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 0 = 1.12345678901235
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 1 = 1.1234567890123
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 2 = 1.123456789012
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 3 = 1.12345678901
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 4 = 1.1234567890
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 5 = 1.123456789
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 6 = 1.12345678
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 7 = 1.1234567
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 8 = 1.123456
0 21:59:20.485 ! 테스트 GBPUSDbc,H1: v1 = 9 = 1.12345
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 10 = 1.1234
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 11 = 1.123
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 12 = 1.12
0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 13 = 1.1

0 21:59:20.485 ! GBPUSDbc,H1 테스트: v1 = 14 = 1

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 0 = 1.123456789012345

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 1 = 1.12345678901234

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 2 = 1.1234567890123

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 3 = 1.123456789012

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 4 = 1.12345678901

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 5 = 1.1234567890

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 6 = 1.123456789

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 7 = 1.12345678

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 8 = 1.1234567

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 9 = 1.123456

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 10 = 1.12345

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 11 = 1.1234

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 12 = 1.123

0 22:01:25.346 ! 테스트 GBPUSDbc,H1: v1 = 13 = 1.12

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 14 = 1.1

0 22:01:25.346 ! GBPUSDbc,H1 테스트: v1 = 15 = 1

그리고?
 
Vasyl Nosal :
그리고?
 string data= DoubleToString ( 1.123456789012345 , 15 ); 
int lenth= StringLen (data);
data= StringSubstr (data, 0 ,lenth);


Alert (data);

2016.02.25 22:06:56.781 prob EURUSD,H1: 경고: 1.123456789012345

나는 17자 이하의 더블 홀드를 버렸습니다. 또 무엇이 필요합니까?


 
lilita bogachkova :
포경수술에 관한 것입니다 :)
지난 세기의 80년대 초반, Noginsk 프로그래밍 대학을 졸업한 Antonina Ivanovna Loseva는 나의 엄격한 지도하에 일했습니다. 다음은 정수로 반올림하는 문제를 해결한 방법입니다. int A = double B + 0.5
 
Vasyl Nosal :
예를 들어?

DoubleToStr(0.9999,3)=1.000

따라서 자신의 결론을 도출하십시오.

 
Vasyl Nosal :

2016.02.25 22:06:56.781 prob EURUSD,H1: 경고: 1.123456789012345

나는 17자 이하의 더블 홀드를 버렸습니다. 또 무엇이 필요합니까?


14번 을 시도하고 이 결과가 나온 이유를 설명하십시오.

 void OnStart ()
  {
   ushort   Characters_delete= 14 ;
   for ( int i= 0 ;i<=Characters_delete;i++)
     {
       double v1= 1.0 / 1.1 ;

      v1=DoubleCrop(v1,i,Characters_delete);

       Print ( "v1 = " ,i, " = " , DoubleToString (v1,Characters_delete-i));
     }
   Print ( "---" );
  }

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 0 = 0.90909090909091

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 1 = 0.9090909090909

0 22:15:05.379 ! 테스트 GBPUSDbc,H1: v1 = 2 = 0.909090909090

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 3 = 0.90909090909

0 22:15:05.379 ! 테스트 GBPUSDbc,H1: v1 = 4 = 0.9090909090

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 5 = 0.909090909

0 22:15:05.379 ! 테스트 GBPUSDbc,H1: v1 = 6 = 0.90909090

0 22:15:05.379 ! 테스트 GBPUSDbc,H1: v1 = 7 = 0.9090909

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 8 = 0.909090

0 22:15:05.379 ! 테스트 GBPUSDbc,H1: v1 = 9 = 0.90909

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 10 = 0.9090

0 22:15:05.379 ! 테스트 GBPUSDbc,H1: v1 = 11 = 0.909

0 22:15:05.379 ! 테스트 GBPUSDbc,H1: v1 = 12 = 0.90

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 13 = 0.9

0 22:15:05.379 ! GBPUSDbc,H1 테스트: v1 = 14 = 0