从double中删除尾随零

时间:2012-07-01 19:17:42

标签: java double decimalformat

如果没有截断或舍入数字,我想删除所有尾随零。例如,数字可能类似于12.0,在这种情况下,应删除尾随零。但这个数字也可能是几乎非理性,比如12.9845927346958762...正在进入屏幕边缘。有没有办法设置DecimalFormat或其他类来剪切尾随零,同时保持不合理性不变?

4 个答案:

答案 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);
}