ポジションサイズ 負の値を返す - ページ 2

 
NoLimitations:

私も先ほどこれを使ってみましたが、効果はありませんでした。DTSは単に見た目の値の精度を変えるだけで、実際の値ではない可能性があります。他のオプションは見当たりません。

はい、文字列はdoubleの値を印刷可能にするだけで、変更しないと思います。 MQLでそれを行う方法はわかりませんが、Javaではある型から別の型に強制的に変換できることを知っています(この場合、doubleからint)。

oracle docsからhttp://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html。 これは紹介されているコードのほんの一部です。

// Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = (int)12.5 f;
// String conversion (5.4) of i's int value:
System.out.println("(int)12.5f==" + i);

あなたの場合、次のように記述することになると思います。

int intConvertedDouble = (int) valueYouGotItFrom;

もちろん、あなたのコードに合うように名前を調整する必要があります。

http://www.studytonight.com/java/type-casting-in-java そこでも取り上げています。 JavaもMQLもC++をベースにしているはずなので、参考になるかもしれませんね。

 

以前投稿したMQL4のリンクはWorking With Doublesと PrintFormatを 参照してください。

JD4 Javaコードの投稿とJavaの仕様の参照がOPの役に立つとは思えません。また、JavaとC++は似ていますが、C++をベースにしていることには反対です。

あなたは役に立とうとしていますが、あなた自身が答えを確信していないときのあなたの返信の多くは、助けを求めている人々を混乱させることにつながると思います。

 
ydrol:

以前投稿したMQL4のリンクはWorking With Doublesと PrintFormatを 参照してください。

JD4 Javaコードの投稿とJavaの仕様の参照がOPの役に立つとは思えません。また、JavaとC++は似ていますが、C++をベースにしていることには反対です。

あなたは役に立とうとしていますが、あなた自身が答えを確信していないときのあなたの返信の多くは、助けを求めている人々を混乱させることにつながると思います。

C++の考えに関しては、https://www.mql5.com/en/docs/basis。 そこに書いてありますし、MQL4をMQL5(https://docs.mql4.com/mql4changes) に近づけるために修正したので、ここにも当てはまります。 私の知識ベースに関しては、専門家であると主張したことはありませんし、何かわからないことがあれば投稿時にそれを知らせます。少なくとも私はそうしようとしますが、時には失敗することもあるかもしれません。また、その人が役に立とうとしているのであれば、その場に座り込んで、あなたには役に立てないと言うつもりはありません。
 

私の投稿を誤解しているようですね。Mql4のOOは確かにc++をベースにしています。 そのことに異論はないでしょう。私はあなたの主張について言及したのです。

JD4: Since Java and MQL are both supposed to be based on C++, this might help you out.

多くのJavaのリファレンスに続いて。私は - と言いました。

ydrol:また、Javaと C++は似ていますが、C++をベースにしていることには反対です。

私は特にあなたのJavaリファレンスについて話していました。Javaはc++をベースにしていないと私は考えています。

いずれにせよ、浮動小数点で小数を表現する話題は、先にWHRoederが言及したスレッドで 何度も取り上げられています。

OPは小数点以下2桁に丸めたいようですが、出力や具体的な例を投稿していないので、丸め誤差の程度は無視できるのではないでしょうか。

 
JD4: この関数のドキュメント・ページによると、そうではありません。https://docs.mql4.com/math/mathround
NoLimitations です。JD4の言う通り、docページには直近の整数に丸めるって書いてあるんだけどね。

どちらも間違いです。最も近い整数に丸められます。関係ないdoubleを 返します。1 = 1.0 = 1.00 = 1.00000 = 1.0000000000000000000000000000 無限桁数

浮動小数点について学んでください。オペランドは==です。- MQL4フォーラム



 

また、コンピュータ・プログラミングは、データ型に関して (int) 1 != (double) 1.00000000 (ad infinitum) となる数少ない場所の一つです。


プログラミング言語としてのJavaの起源について、参考資料がありますので、ご覧ください。

https://en.wikipedia.org/wiki/Java_(programming_language)

http://www.freejavaguide.com/history.html

C++に関しては、どちらもほぼ同じことを言っているので、wikiから掲載します。 "この言語は、その構文の 多くをCと C++に 由来するが、低レベルの 機能はそのどちらにも劣る。"

 

同年代から「言語の構文は、その表面的な 形を定義する。( 波括弧など)。このスレッドで議論されていることは、構文とは関係ありません。私の意見は、MQLと同じように「JavaはC++をベースにしている」と言うのは、はるかに強い主張であり、私は同意しない

しかし、それは質的なステートメントであるため、我々は同時に正しいことも間違っていることもあります。 それでも私は、Javaの仕様がOPの助けになるとは思えません。すでにこの問題について特定のリンクが与えられており、これは構文に関する質問ではなかったのです。

あなたが言及した両方の記事は、Javaが構文から借用していることを強調していますが、それ以外はほとんどありません。これは構文に関連した問題ではありません。

しかし、これはMQLで使われているIEEE754浮動小数点表現に関連して おり、この表現もまた他の言語と共有されて います。(これは、言語の構文の類似性よりも、ほとんどのCPU/FPUでサポートされている標準だからです。 問題は、小数点の浮動小数点表現に小さな誤差があることです。OPは小数点以下2桁に丸めたいのです。IEEE754形式では10分の1(0.1)や100分の1(0.01)を正確に格納 することができない。IEEE754のバイナリフォーマットでは、これらは繰り返しのバイナリ分数です(1/3が繰り返しの10進数0.33333...であるのと同じように)-意図した数と実際の数の差は非常に小さいのですが、それは十分に大きいので

1/10 != 0.1 // おそらく

そして int(0.1 * 10) は間違った方向に丸めるかもしれません。

しかし、OPが何を見たのか正確に投稿していないので、この話題の3番目の投稿で、MQLのスレッドを読んでください。MQLのスレッドを読んでから、Javaの仕様も読めというのは意味がないと思いますし、彼らはJavaに精通していない可能性が高いです。

スレッドの要約です。

  • OP : 数字の挙動がおかしい
  • WHRoeaderです。浮動小数点がおかしい理由を説明したリンクがいくつかあります。 <答えはこの中のどこかに あります ...
  • OP:I get them, numbers are still behaving funny.
  • JD4: MQL4とJavaはC++をベースにしています。Java開発者でも読みにくいタイプキャストとプロモーションに関する不明瞭なJavaのリンクを紹介します。
  • ydrol: それがOPにどう役立つんですか?JavaがC++をベースにしているというのは同意できない 答えは少し前に投稿されたものです...
  • などなど。

 
私がJavaの型変換方法を投稿した理由は2つあります。 1つは、確かに私はJavaに精通しているからです。 2つ目は、コードを検索したとき、疲れていたせいか、MQLドキュメントにその方法が見当たらなかったからです。 そこで、役に立とうと、MQLとJavaは共通言語であるC++と比較することから十分に近いと推測し、うまくいくと思われる解決法を提案したのです。
 
JD4: WHさんは、もう一度読み直してください。私は、この関数が実際に何をするかではなく、ページに書いてあることを言ったのです。
  1. もう一度、質問の内容を読み直してください。
    NoLimitations MathRound()を使っているのに、なぜ小数点以下が表示されるのでしょうか?
    このページに書いてあることは、そのまま実行されます。それは丸めです。小数点以下が何桁になるかという質問とは何の関係もありません。
  2. 小数点以下が複数になるのは、必要な数を指定せずにdoubleを表示したときに起こることです。
 
WHRoeder:
JD4: WHは戻って読み直す必要があると思います。私はページに書いてあることがその関数がすることであって、実際にすることではありません。
  1. もう一度、質問の内容を読み直してください。
    NoLimitations です。MathRound()を使っているのに、なぜ小数点以下が複数回答されるのですか?
    このページに書いてあることは、そのとおりです。それは丸めです。小数点以下が何桁になるかという質問とは何の関係もありません。
  2. 小数点以下が複数になるのは、必要な数を指定せずにdoubleを表示したときに起こることです。

上記は、「MathRoundはdoubleを返す;小数点 以下は無限大」という具体的な投稿に対する回答です。"

もう一度、ドキュメントページによると

"戻り値

最も近い整数に丸められた値。"

さて、あなたの投稿のこの部分に対する具体的な回答です。

"ページに書いてあることは、実行する ことです。それは丸めです。小数点以下の桁数の問題とは関係ありません。"

もう一度、引用文を読み直してください。"最も近い整数に丸められた値 " を返すと書いてあります。 整数とは、定義上、小数点以下がない整数です。 もう一度言いますが、もしこれが実際に行うことでないなら、コードか説明が壊れており、一方か一方、あるいは両方をMQで修正するか、これらの機能は 宣伝どおりには動かないことを示す警告ラベルが必要でしょう。

もしそれが実際に与えられた型を返すが、最も近い整数の値と数学的に同等である場合(1.23456から1.00000を返すように、1 == 1.00000)、しかし実際の整数の型を返さない場合、リファレンスページには「基礎のデータ型を変更しない」等、何か明確に記載する必要があります。 これは元のロシア語のページからの平易な翻訳だと思いますが、そのため英語では明確ではありません。