DoubleをInt-Javaと.Netに変換するときの異なる答え
質問
C#でdouble(1.71472)をintに変換する場合、答え2が返されます。intValue()メソッドを使用してJavaでこれを行うと、答えとして1が返されます。
Javaはコンバージョンを切り捨てますか?
Java APIドキュメントにクラスに関する情報がほとんどない理由、つまり
指定された値を返します 整数としての数値。これには、 丸めまたは切り捨て。
丸めについてもう少し情報があれば役立つでしょう!
解決
Javaは、浮動小数点型から整数型に狭めるとゼロに丸められます。キャスト変換を使用すると、C#もゼロに丸められます。丸めるのは Convert.ToInt32
です:
double d = 1.71472;
int x = (int) d; // x = 1
int y = Convert.ToInt32(d); // y = 2
詳細は、 Java言語仕様に記載されています。 Number
で引用されているドキュメントではサブクラスのオプションが開いたままですが、 Double
、は実装について明示的です:
このDoubleの値を int(int型へのキャストによる)。
BigDecimal
では、8つの異なる丸めポリシーのいずれかを指定できます。
他のヒント
浮動小数点から整数型に絞り込むと、Javaはゼロに向かって丸めます。
Java言語には、一般的なルールに関する詳細なドキュメントがあります。仕様。 Number
のドキュメントではサブクラスのオプションが開いたままになっていますが、具体的なボクシングタイプのドキュメントはより明確であることに注意してください:
このDoubleの値を int(int型へのキャストによる)。
BigDecimal を使用する場合、8つの異なる丸めポリシーのいずれかを指定できます。
Jon Skeetは正しいですが、他に注意すべきことは、.NETが丸めアルゴリズムとしての銀行家の丸め。偶数整数へのラウンドの中間にいるとき。