末尾のゼロがない場合は、数値を切り捨てたり丸めたりせずに、すべての末尾のゼロを削除したいと思います。たとえば、数値はのようなものにすることができます12.0
。その場合、末尾のゼロを削除する必要があります。しかし、その数は、画面の端に行くなど、ほとんど不合理なものになる可能性もあります。12.9845927346958762...
非合理性を損なわずに、末尾のゼロをカットするようにDecimalFormatまたはその他のクラスを設定する方法はありますか?
4 に答える
に切り替える場合BigDecimal
は、これを実現する#stripTrailingZeroes()メソッドがあります。
文字列操作を使用して、末尾のゼロを削除できます。
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));
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(正しい)
double result = ...;
int intResult = (int)result;
if (result == intResult) {
System.out.println(intResult);
} else {
System.out.println(result);
}