mql5语言的特点、微妙之处以及技巧 - 页 65

 

你能告诉我如何在不删除文件本身的情况下将二进制数据文件的大小减少到新的数据大小,或者只能通过调用外部dll 来完成吗?

 
康斯坦丁

你能告诉我如何在不删除文件本身的情况下将二进制数据文件减少到一个新的数据大小,还是只有通过调用外部dll 才能做到这一点?

我需要一个类似于SetEndOfFile的函数。

大约6年前就有人问过这个问题

 
组合器

我们需要一个类似于SetEndOfFile的函数。

大约6年前就有人问过这个问题。

这就是我所写的))因为使用外部dlls 或删除一个文件是不符合卡西尔原则的。

 
组合器

我们需要一个类似于SetEndOfFile的函数。

大约6年前就有人问过这个问题。

bool SetEndOfFile( const string FileName, const uint Size, const int Commong_Flag = 0 )
{
  uchar Buffer[];
  
  return((FileLoad(FileName, Buffer, Commong_Flag) > Size) && ArrayResize(Buffer, Size) && FileSave(FileName, Buffer, Commong_Flag)));
}
 
fxsaber:

文件的大小只会增加,如果数据阵列的大小减少,文件将保持不变。

 
康斯坦丁

文件的大小只会增加;如果数据阵列的大小减少,文件将保持在相同的大小。

减少了。

 
fxsaber:
这真是太过分了,不是吗?
 
组合器
这真是太过分了。

绝对的!

 
再次谈及双重性的问题

关于交易、自动交易系统和交易策略测试的论坛

虫子、虫子、问题

fxsaber, 2018.01.15 11:53

因为输入的fmod是双倍的。Double不能存储大量的整数。例如,你的案子。

Print(DoubleToString((double)131472503841474907, 0)); // 131472503841474912

做到这一点。

long fmod( const long Value, const long Value2 )
{
  return(Value % Value2);
}


以float为例,你可以很快理解double的特殊性。

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  for (int i = 0; i < INT_MAX; i++)
    if ((int)(float)i != i)
    {
      PRINT(i);
      PRINT((float)i);
      PRINT((double)i);
      
      break;
    }
}


结果

i = 16777217
(float)i = 16777216.0
(double)i = 16777217.0


SZYDouble不会失去整个内部范围,而长距离就不一样 了。

 
康斯坦丁

这就是我所写的)),因为通过外部dlls 或文件删除来做是不符合卡西的。

看了,想看却忘了

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2011.08.01
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы