// 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);
私も先ほどこれを使ってみましたが、効果はありませんでした。DTSは単に見た目の値の精度を変えるだけで、実際の値ではない可能性があります。他のオプションは見当たりません。
はい、文字列はdoubleの値を印刷可能にするだけで、変更しないと思います。 MQLでそれを行う方法はわかりませんが、Javaではある型から別の型に強制的に変換できることを知っています(この場合、doubleからint)。
oracle docsからhttp://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html。 これは紹介されているコードのほんの一部です。
あなたの場合、次のように記述することになると思います。
もちろん、あなたのコードに合うように名前を調整する必要があります。
http://www.studytonight.com/java/type-casting-in-java そこでも取り上げています。 JavaもMQLもC++をベースにしているはずなので、参考になるかもしれませんね。
以前投稿したMQL4のリンクは、Working With Doublesと PrintFormatを 参照してください。
JD4 Javaコードの投稿とJavaの仕様の参照がOPの役に立つとは思えません。また、JavaとC++は似ていますが、C++をベースにしていることには反対です。
あなたは役に立とうとしていますが、あなた自身が答えを確信していないときのあなたの返信の多くは、助けを求めている人々を混乱させることにつながると思います。
以前投稿したMQL4のリンクは、Working With Doublesと PrintFormatを 参照してください。
JD4 Javaコードの投稿とJavaの仕様の参照がOPの役に立つとは思えません。また、JavaとC++は似ていますが、C++をベースにしていることには反対です。
あなたは役に立とうとしていますが、あなた自身が答えを確信していないときのあなたの返信の多くは、助けを求めている人々を混乱させることにつながると思います。
私の投稿を誤解しているようですね。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桁に丸めたいようですが、出力や具体的な例を投稿していないので、丸め誤差の程度は無視できるのではないでしょうか。
どちらも間違いです。最も近い整数に丸められます。関係ない。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に精通していない可能性が高いです。
スレッドの要約です。
上記は、「MathRoundはdoubleを返す;小数点 以下は無限大」という具体的な投稿に対する回答です。"
もう一度、ドキュメントページによると
"戻り値
最も近い整数に丸められた値。"
さて、あなたの投稿のこの部分に対する具体的な回答です。
"ページに書いてあることは、実行する ことです。それは丸めです。小数点以下の桁数の問題とは関係ありません。"
もう一度、引用文を読み直してください。"最も近い整数に丸められた値 " を返すと書いてあります。 整数とは、定義上、小数点以下がない整数です。 もう一度言いますが、もしこれが実際に行うことでないなら、コードか説明が壊れており、一方か一方、あるいは両方をMQで修正するか、これらの機能は 宣伝どおりには動かないことを示す警告ラベルが必要でしょう。
もしそれが実際に与えられた型を返すが、最も近い整数の値と数学的に同等である場合(1.23456から1.00000を返すように、1 == 1.00000)、しかし実際の整数の型を返さない場合、リファレンスページには「基礎のデータ型を変更しない」等、何か明確に記載する必要があります。 これは元のロシア語のページからの平易な翻訳だと思いますが、そのため英語では明確ではありません。