Moh*_*nde 8 java double decimalformat
我想删除所有尾随零而不截断或舍入数字,如果它没有任何.例如,数字可能类似12.0,在这种情况下,应删除尾随零.但这个数字也可能是一种几乎不合理的东西,比如12.9845927346958762...继续走到屏幕的边缘.有没有办法设置DecimalFormat或其他类来剪切尾随零,同时保持非理性完整?
Kep*_*pil 15
如果您愿意切换到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));
Run Code Online (Sandbox Code Playgroud)
小智 6
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(正确)