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(".$", "");
}

或者

私有静态字符串 removeTrailingZeros(double d) {
return String.valueOf(d).replaceAll(".?0*$", "");
}

这些是错误的代码。

System.out.println(removeTrailingZeros( 1234.23432 400000 ));
返回:1234.23432
但必须返回:1234.23432 4


私有静态字符串 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(正确)

于 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 回答