質問

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が丸めアルゴリズムとしての銀行家の丸め。偶数整数へのラウンドの中間にいるとき。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top