NormalizeDoubleによるMT4での数値の丸め方 - ページ 12

 
lilita bogachkova:
それから、サービスデスクに、彼らがそのような追加関数MathCeil() を発明したことを書き込まなければなりません :)
ただ、違うだけで、あまり気にならないんです :)
 
Алексей Тарабанов:
int A = double B + 0.5
については、彼の言うとおりです。"まず、端数に0.5を足して端数部分を 切り捨て、結果を整数に丸める"とありますが、MQはその手間を省くためにMathCeil() を与えており、MathCeil() は丸めずに 次点の 整数を返すのです
void OnStart()
  {
   ushort  Characters_delete=14;
   for(int i=0;i<=Characters_delete;i++)
     {
      double v1=i+0.999999999999999;

      int v2=v1+0.5;
      Print("v1 = ",i," = ",DoubleToString(v2,2));
     }
  }
 
Vasyl Nosal:
じゃあ、5つね。
5って何?このような数字を正規化すると、9がすべて0になってしまうので、正規化してから捨てると間違った結果になる。
 
lilita bogachkova:
については、彼の言うとおりです。"まず分数に0.5を加えて、結果から分数 部分を切り捨て、結果を整数に丸める。" とありますが、MQはそれを気にしないようにMathCeil() を与えてくれました。
ありがとう、サニー。でも、MathCeilはdouble: inputとoutputの両方でしか動かないんだ :)
 
Алексей Тарабанов:
ありがとう、サニー。でも、MathCeilはdouble: inputとoutputの両方でしか動かないんだ :)
解決済み:int A = (int)MathCeil(double B)。
 
lilita bogachkova:
解くと、int A = (int)MathCeil(double B) となります。
申し訳ありません:int A =(int)MathCeil(double B+0.5)
 
Алексей Тарабанов:
申し訳ありません:int A =(int)MathCeil(double B+0.5)
Not a:解決済み: int A =(int)MathCeil(double B)。
 
lilita bogachkova:
Not a:解決済み: int A =(int)MathCeil(double B)。
try: int A =MathCeil(2.6)
 
Алексей Тарабанов:
try: int A = MathCeil(2.4)

int A =MathCeil(2.4)=3

int A = MathCeil(2.4+0.5) =3

けど

int A = MathCeil(2.6+0.5) =4

int A = MathCeil(2.6) =3

 
lilita bogachkova:

int A = MathCeil(2.4)=3

int A = MathCeil(2.4+0.5) =3

けど

int A = MathCeil(2.6+0.5) =4

悪魔は混乱する...もちろん、2.6です。数字がおかしい...。