0

私はJavaが初めてで、数字を見栄えよくしようとしているので、doubleをintにキャストしたいのですが、doubleが3.0のようなもので、実際には小数が失われないものである場合に限ります。double に小数があるかどうかを確認するにはどうすればよいですか?

私のプログラムにはたくさんのコードが含まれていますが、私が持っているのは、一連の値を配列のインデックスに割り当てるループです。その後、各値を順番に出力し、可能であれば小数点を失います。

コードを投稿できなくて申し訳ありませんが、たくさんのコードがあり、小さなスニペットはおそらく意味をなさないでしょう.

ありがとう、ハロルド

4

3 に答える 3

2

浮動小数点数が整数に「近い」かどうかをテストするのは簡単です...近い定義については。@hexafractionの回答を参照してください。

しかし、あなたはこれについて間違った方法で進んでいると思います:

  • 数値を通常とは異なる方法で装飾する場合は、書式設定で行う必要があります。つまり、数値を文字列に変換します。

    • FormatterまたはのフレーバーがDecimalFormatすでにあるかもしれません。(たとえば、@Cody の回答を参照してください。)

    • DecimalFormatそれ以外の場合は、出力文字列を書き換えて冗長な (考え方によっては!) 末尾のゼロなどを削除する単純なサブクラスを作成できます。

  • また、このような数字を美化するのが健全な慣行であるかどうかも疑問です。数学者 (そして実際には、小学校の数学の授業を理解している人) にとっては、別のことを意味します。11.0

    • 1整数 1、または小数点以下の桁数のない数値を意味します。つまり、 ~ の範囲の数値0.5です1.49999...

    • 1.0は整数ではなく、 から までの範囲の数値を意味0.951.049999...ます。

    つまり、あなたの「片付け」は、実際には有益な情報を捨てているのです。数字が何を意味するのかを実際に理解し、気にかけている人にとっては、これは好ましくないでしょう。もちろん、それは文脈、および数字の重要性/重要性によって異なります。


OPは次にコメントします:

考えてみれば、後で代数計算を行うので、.0 を付けずにそのまま表示した方がよいのではないでしょうか。

スポット!きれいな出力が得られるように数値を変更すると、精度が低下します。これにより、これらの数値を使用した後続の計算の精度が損なわれます。

于 2013-10-19T01:10:01.120 に答える
1

妥当な誤差量を割り当てて比較できます。

if(Math.abs(someDouble-(StrictMath.round(someDoublet))<0.0001){
    long thatLong = StrictMath.round(someDouble);
}

これは float を丸めた float と比較し、0.0001 (または選択したデルタ) より小さい場合は int にキャストします。

于 2013-10-19T00:43:28.843 に答える
1

出力用に数値をフォーマットするだけの場合は、PrintStream#printfを調べる必要があります。数値の書式設定の概要は次のとおりです

System.out.printf("%.0f", "42.0357");
System.out.printf("%.3f", "42.0357");
System.out.printf("%5.0f", "42.0357");

これは印刷されます

42
42.036
   42

これらの指定子を使用すると、間隔、配置、小数点などを細かく制御できます。試してみてください。

于 2013-10-19T01:07:19.983 に答える