エラー、バグ、質問 - ページ 1554

削除済み  
-Aleks-:

他のスレッドで回答が得られなかったので、ここで質問を繰り返しますが、もしかしたらこれが参考になるかもしれません

"

私の間違いが何なのか、教えてください。

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES)," PriceOpenSell[%d] = %G",i,PriceOpenSell[i]);

OpenSellTime配列の日付は表示されず、式の2番目の部分であるPriceOpenSellは表示されません。

また、%Gや%dなどのprintf コマンドも見当たりません。

"

ただし、C言語のチュートリアルであれば、どのようなものでもよいでしょう。
 
Alexey Kozitsyn:
ただし、C言語のチュートリアルであれば、どのようなものでもかまいません。

返信ありがとうございました!しかし、リンク先が分かりにくいですね...。すぐには解らないのですが......掲示板に投稿する前にヘルプでこの文章を拝見しました。

私の理解が正しければ、%dはゼロがあっても無視し、%Gはゼロを切り捨てずに値を出力するのでしょうか。私はバカではないのですが、ヘルプが理解できず、理解しないと文字列がうまく動かない理由がわからないのです......。

削除済み  
-Aleks-:

返信ありがとうございました!しかし、リンク先が分かりにくい...。すぐには解らないのですが......掲示板に投稿する前にヘルプでこの文章を拝見しました。

私の理解が正しければ、%dはゼロがあっても無視し、%Gはゼロを切り落とさずに値を出力するのでしょうか?バカじゃないんだけど、ヘルプが理解できないし、理解できないと文字列がうまく動かないのも理解できないし...。

私は仕事でこの機能を使うことはありませんが、自分で簡単な実験をすることは難しくないと思います。
 
-Aleks-:

返信ありがとうございました!しかし、リンク先が分かりにくい...。すぐには解らないのですが......掲示板に投稿する前にヘルプでこの文章を拝見しました。

私の理解が正しければ、%dはゼロがあっても無視し、%Gはゼロを切り落とさずに値を出力するのでしょうか?バカじゃないんだけど、ヘルプが理解できないし、理解できないと文字列がうまく動かないのも理解できないし...。

こちらを ご覧ください。
 
Alexey Kozitsyn:
私は仕事でこの機能を使うことはありませんが、皆さんも簡単な実験をすることができるのではないでしょうか。

しかし、私は......調べたし、使ってはいるのですが、仕様に合わないので、正確な構文がわからないんです

%[フラグ][幅][.精度][{h|l|ll|I32|I64}]タイプ

すべてのパラメータを使用できないことは、ヘルプファイルには記載されていません。そして何より、どこに構文の間違いがあるのかがはっきりしないので、もしかしたら指摘されたらもっと理解できるかもしれません。

 
Artyom Trishkin:
こちらで お読みください。

ありがとうございます。正しい情報を探してざっと読んでみると、最初の部分がテンプレートになっていて、それを間違えてしまったことが判明...。だろう?

変数が入る場所、私の場合は配列のインデックス、double型のtimeとnumber、それから変数そのものを指定する必要がある、というようなことです。記事のロジックからすると、次のようになるはずです。

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G, PriceOpenSell[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES),i,PriceOpenSell[i]);

それとも、また間違っているのでしょうか?

 
-Aleks-:

ありがとうございます。正しい情報を探してざっと読んでみると、最初の部分がテンプレートになっていて、それを間違えてしまったことが判明...。だろう?

変数が入る場所、私の場合は配列のインデックス、double型のtimeとnumber、それから変数そのものを指定する必要がある、というようなことです。記事のロジックからすると、次のようになるはずです。

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G, PriceOpenSell[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES),i,PriceOpenSell[i]);

それとも、また間違っているのでしょうか?

まあ、そこにはテンプレートについて非常に明確に書かれています。変数を挿入する場所には、テンプレート内で%記号が付けられています。テンプレート全体は、反転カンマで囲まれています。そして、テンプレート自体の後に、テンプレートで指定されている変数をカンマ区切りで列挙しています。テンプレートに書かれている順番で左から右へ順番に。

また、変数の種類とその書式に関する仕様もすべて揃っています。ただ、「テンプレート上の文字列の書式設定」という見出しから、ちらっと目を通すのはやめましょう。

 
Artyom Trishkin:

さて、テンプレートについては非常に明確です。変数が挿入される場所は、テンプレート内で%記号で示されています。テンプレート全体は、反転カンマで囲まれています。そして、テンプレート自体の後に、テンプレート内の変数をカンマで区切って列挙しています。テンプレートに書かれている順番で左から右へ順番に。

また、変数の種類とその書式に関する仕様もすべて揃っています。ただ、「テンプレートによる文字列の書式設定」という見出しから、チラ見せずに読んでみてください。

テンプレートを引用して、変数を順に並べるという書き方なんですが、何がいけないんでしょうか?
 
-Aleks-:
そのように書きました。反転カンマでテンプレート、変数の順番で書きました。何がいけないのでしょうか?

"OpenSellTime[%index must be entered here] = %time, PriceOpenSell[%index] = %price" - このパターンでしょうか?

その場合、このようになるはずです。

"OpenSellTime[%i] = %I64u, PriceOpenSell[%i] = %.5f"

値そのものは、カンマで区切って次に記載する。

 ,i,OpenSellTime[i],i,PriceOpenSell[i]

の合計です。

printf("OpenSellTime[%i] = %I64u, PriceOpenSell[%i] = %.5f",i,OpenSellTime[i],i,PriceOpenSell[i]);

...あのもし、私が何かを見逃していなければ...。

 

MQL4、DoubleToStr()DoubleToString()。DoubleToStr()の第2引数に "Default 8 "を追加する。

コード

#property strict
void OnStart()
  {
   Print("1) DoubleToStr(0.123456789) = ",DoubleToStr(0.123456789));
   Print("2) DoubleToString(0.123456789) = ",DoubleToString(0.123456789));
  }

ログでは、それらの結果は = 0.12345679 となり、つまり、この関数は値を丸めます。これについては、もっと書いてもいいと思うし、せめて型の例をそこに置いてもいいと思うんです。

string value1=DoubleToStr(1.28473418, 5);
// содержимое строки value1 - "1.28473"

string value2=DoubleToStr(1.28473418, 3);
// содержимое строки value2 - "1.285"

丸め誤魔化しているように見える。