voidOnStart()
{
//--- выведем DBL_MAX с помощью Print(), это равносильно PrintFormat(%%.16G,DBL_MAX)Print("---- как выглядит DBL_MAX -----");
Print("Print(DBL_MAX)=",DBL_MAX);
//--- теперь выведем число DBL_MAX с помощью PrintFormat()PrintFormat("PrintFormat(%%.16G,DBL_MAX)=%.16G",DBL_MAX);
//--- Вывод в журнал "Эксперты"// Print(DBL_MAX)=1.797693134862316e+308// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308//--- посмотрим как выводится тип floatfloat c=(float)M_PI; // нужно явно приводить к целевому типуPrint("c=",c, " Pi=",M_PI, " (float)M_PI=",(float)M_PI);
// c=3.14159 Pi=3.141592653589793 (float)M_PI=3.14159//--- покажем, что может произойти при арифметических операциях над вещественными типамиdouble a=7,b=200;
Print("---- перед арифметическими операциями");
Print("a=",a," b=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- разделим a на b (7/200)
a=a/b;
//--- теперь как будто восстановим значение в переменной b
b=7.0/a; // ожидается, что b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - но это не так//--- выведем вновь вычисленное значение bPrint("----- после арифметических операций");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- вывод в журнал "Эксперты"// Print(b)=200.0// Print(DoubleToString(b,16))=199.9999999999999716 (видим, что на самом деле b уже не равно 200.0) //--- создадим очень маленькое значение epsilon=1E-013double epsilon=1 e-13;
Print("---- создадим очень маленькое число");
Print("epsilon=",epsilon); // получим epsilon=1E-013//--- теперь вычтем эпсилон из числа b и выведем снова значение в журнал "Эксперты"
b=b-epsilon;
//--- выводим двумя способамиPrint("---- после вычитания epsilon из переменной b");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- вывод в журнал "Эксперты"// Print(b)=199.9999999999999 (теперь значение b после вычитания эпсилон не может округлиться до 200)// Print(DoubleToString(b,16))=199.9999999999998578// (теперь значение b после вычитания эпсилон не может округлиться до 200)
}
curwords = NULL
为什么Print("next======",curwords.m_next!=NULL);不抛出一个错误?
因为
curwords.m_next!=NULL
在创建对象 时,你是否将引用归零?
创建时不是NULL。
开发者给了你CheckPointer函数。
索引为0的元素被删除,而数组中最近的元素 应该被删除,即索引为(n-1),其中n是数组的大小。
重置
int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL。
结果是一样的
自己尝试
自己尝试
我为什么要试一试 :)
对我来说,它工作得很好:)
可以根据需要设置和显示图标。
终端写到用户文件夹。 我在快捷方式中指定了/portable键。
重置
int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL。
结果是一样的
自己试试吧。
请写信给Servicedesk。指定操作系统、比特率和终端的构建。请附上问题不断重现的源代码--我们会处理的。
好的。那我就壮壮胆子吧。因此,Print() 函数的描述说" 双倍类型的 数据以点后16 位小数的精度打印"。事实上,事实证明,Print()函数输出的数据有些圆滑。
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999999716
谢谢你提出这个话题,帮助中加入了一个新的、更完整的打印 功能的例子。
例子。
我如何知道两种货币的点数?
为当前的仪器。
例如,对于货币Symbol1, Symbol2?
项目的大小 可以通过SymbolInfoDouble(symbol_name, property)获得。
符号信息双数
识别器
描述
财产类型
SYMBOL_BID
出价--最好的销售报价
双
SYMBOL_ASK
询问--最佳出价
双
SYMBOL_LAST
最后一笔交易执行的价格
双
符号_POINT
一个点的价值
双