错误、漏洞、问题 - 页 705

 
Yedelkin:
而关于Print() 的缺陷问题,我们暂且不做回答,好吗?:)
如你所愿。
 
victorg:
不管怎么样。

好的。那我就壮壮胆子吧。因此,Print() 函数的描述说" 双倍类型的 数据以点后16 位小数的精度打印"事实上,事实证明,Print()函数输出的数据有些圆滑

void OnStart()
  {
   double a,b;

   a=7.0/200.0;
   b=7.0/a;
   Print("Print(b)=",b);
   Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
  }

ND 0 victorg2 (EURUSD,M1) 11:04:42 Print(b)=200.0
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.9999999999999716
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 
Yedelkin:

好的。那我就壮壮胆子吧。因此,Print() 函数的描述说" 双倍类型的 数据以点后16 位小数的精度打印"实际上,事实证明,Print() 函数产生的数据略为圆滑

ND 0 victorg2 (EURUSD,M1) 11:04:42 Print(b)=200.0

MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.99999999999999999716

123.4567890123456(7>5,因此四舍五入)

它似乎与描述的一样。故障是什么? 没有打印出零吗?
 
MetaDriver:
一切似乎都符合描述。有什么问题吗?"零 "没有印出来吗?
错误在于Print()函数不能打印"精确到小数点后16 位的 双数类型的 数据"。
 
Yedelkin:
错误在于Print()函数没有输出"数据类型为double,精度为点后16 位小数"

检查

 Print("Print(b)="+ b);
 
sergeev:

检查

没有花心思去检查。

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
void OnStart()
  {
   double a,b;
   a=7.0/200.0;
   b=7.0/a;
   //Print("Print(b)=",b);
   Print("Print(b)="+b);
   Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
  }
//+------------------------------------------------------------------+

首先,编译器产生了 "从'数字'到'字符串'的隐式转换Victorg2.mq5 12 22"。

第二。

IS 0 victorg2 (EURUSD,M1) 17:46:45 Print(b)=200
PJ 0 victorg2 (EURUSD,M1) 17:46:45 Print(DoubleToString(b,16))=199.9999999999999716

 

使用适当的PrintFormat函数 进行全面的格式控制。

void OnStart()
  {
   double a,b;
   a=7.0/200.0;
   b=7.0/a;
   printf("Format: %.15lf",b);
   PrintFormat("Format: %.15lf",b);
  }

Format: 199.999999999999970
Format: 199.999999999999970
打印时默认为正常的四舍五入模式,即双数到4位。我们将纠正文件。
Документация по MQL5: Общие функции / PrintFormat
Документация по MQL5: Общие функции / PrintFormat
  • www.mql5.com
Общие функции / PrintFormat - Документация по MQL5
 

请给结构的指针(句柄)(最好也给数组,包括静态的)。

以班级为单位的包裹往往是一个糟糕的解决方案。

struct SEmpty
  {
  };
  
class CEmpty
  {
  };
void OnStart()
  {
   Print("sizeof(SEmpty) = ",sizeof(SEmpty));   
   Print("sizeof(CEmpty) = ",sizeof(CEmpty));
  }
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(CEmpty) = 16
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(SEmpty) = 0
 
MetaDriver:

请给结构的指针(句柄)(最好也给数组,包括静态的)。

你的意思是什么,为什么?

 
Renat:

1. 在什么意义上和

2.为什么?

1.

CEmpty  *C[];  // Это работает.
SEmpty  *S[];  // Error: 'SEmpty' - class type expected SizeOf_Test.mq5 19      1

要创建指向结构(数组)的数组,随后进行初始化 for(i){ S[i] = GetPointer(StaticStruct[i]); }

2.保持有意义的数据的稳固(打包)阵列。

在处理输出到原始OpenCL缓冲区的数据时(或发送到DLL,写入文件 等),非常重要。

同时,可以在不重写数据的情况下重新安排数据访问的顺序(例如,在对 指针进行排序时)。