如果没有截断或舍入数字,我想删除所有尾随零。例如,数字可能类似于12.0
,在这种情况下,应删除尾随零。但这个数字也可能是几乎非理性,比如12.9845927346958762...
正在进入屏幕边缘。有没有办法设置DecimalFormat或其他类来剪切尾随零,同时保持不合理性不变?
答案 0 :(得分:14)
如果您愿意切换到BigDecimal
,可以使用#stripTrailingZeroes()方法来完成此操作。
答案 1 :(得分: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));
答案 2 :(得分: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.30 而不是 472.304
的System.out.println(removeTrailingZeros(的 472304000 强>)); 返回 47230 而不是 472304000
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 )
当前主题“从双重删除尾随零”的完美解析是使用
.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 (正确)
答案 3 :(得分:-2)
double result = ...;
int intResult = (int)result;
if (result == intResult) {
System.out.println(intResult);
} else {
System.out.println(result);
}