8

末尾のゼロがない場合は、数値を切り捨てたり丸めたりせずに、すべての末尾のゼロを削除したいと思います。たとえば、数値はのようなものにすることができます12.0。その場合、末尾のゼロを削除する必要があります。しかし、その数は、画面の端に行くなど、ほとんど不合理なものになる可能性もあります。12.9845927346958762...非合理性を損なわずに、末尾のゼロをカットするようにDecimalFormatまたはその他のクラスを設定する方法はありますか?

4

4 に答える 4

22

に切り替える場合BigDecimalは、これを実現する#stripTrailingZeroes()メソッドがあります。

于 2012-07-01T19:27:40.373 に答える
7

文字列操作を使用して、末尾のゼロを削除できます。

private static String removeTrailingZeros(double d) {
  return String.valueOf(d).replaceAll("[0]*$", "").replaceAll(".$", "");
}

System.out.println(removeTrailingZeros(1234.23432400000));
System.out.println(removeTrailingZeros(12.0));
于 2012-07-01T19:52:55.160 に答える
4

private static String removeTrailingZeros(double d){
return String.valueOf(d).replaceAll( "[0] * $"、 "").replaceAll("。$"、 "");
}

また

private static String removeTrailingZeros(double d){
return String.valueOf(d).replaceAll( "。?0 * $"、 "");
}

これらは間違ったコードです。

System.out.println(removeTrailingZeros(1234.23432 400000));
戻り値:1234.23432
、ただし戻り値:1234.23432 4


private static String removeTrailingZeros(double myDouble){
return(new BigDecimal(Double.toString(myDouble)))。toPlainString()。replaceAll( "[0]
* $"、 "").replaceAll("。$"、 "" );
}

この方法もうまくいきません

System.out.println(removeTrailingZeros(472.304000)); 472.304 ではなく472.30を返します

System.out.println(removeTrailingZeros(472304000)); 472304000 ではなく47230を返します


BigDecimalの#stripTrailingZeroes()またはtoPlainString()は優れたメソッドですが、単独ではありません。

//----------------BigDecimal.toPlainString -------------
System.out.println((new BigDecimal(Double.toString(4724) ))。toPlainString());
System.out.println((new BigDecimal(Double.toString(472304000)))。toPlainString());

戻り値:
4724.0(これは問題ありません-「。0」は必要ありません)
472304000(これは問題ありません)

//----------------BigDecimal.stripTrailingZeros ---- ---------
System.out.println((new BigDecimal(Double.toString(4724))。stripTrailingZeros()));
System.out.println((new BigDecimal(Double.toString(472304000d))。stripTrailingZeros()));

戻り値:
4724.0 (これは問題ありません)
4.72304E + 8(これは問題ありません-472304000が必要です)

現在のサブジェクト「doubleから末尾のゼロを削除する」の完全な解決策は、
.stripTrailingZeros()。toPlainString()を使用することです。

例:
// --------- BigDecimal.stripTrailingZeros.toPlainString ------- ----------
System.out.println(new BigDecimal(Double.toString(472.304000))。stripTrailingZeros()。toPlainString());
System.out.println((new BigDecimal(Double.toString(4724))。stripTrailingZeros()。toPlainString()));
System.out.println((new BigDecimal(Double.toString(472304000d))。stripTrailingZeros()。toPlainString()));

結果は次のとおりです
。472.304 (正しい)
4724 (正しい)
472304000(正しい)

于 2012-12-21T19:44:36.917 に答える
-2
double result = ...;
int intResult = (int)result;
if (result == intResult) {
    System.out.println(intResult);
} else {
    System.out.println(result);
}
于 2016-02-19T00:01:05.040 に答える