从双精度中删除.0

我试图动态地在字符串中显示数字,所以如果数字有十进制显示它们但是如果不显示.0

示例:将5.5显示为5.5,将5.0显示为5

这就是我到目前为止:(答案是双倍的)

double temp = answer; long temp2 = (long) temp; if (temp == temp2) { output = String.valueOf(temp2); System.out.println(output); 

由于Long的最大尺寸,这项工作的罚款大约为1e18然后会出错。 那么我如何在5.43e86等更大的数字上实现这一目标

使用DecimalFormat

 double answer = 5.0; DecimalFormat df = new DecimalFormat("###.#"); System.out.println(df.format(answer)); 

DecimalFormat建议是处理此问题的最简单方法。 如果它们还不够,这是另一个想法。

如果您开始达到可以用Java中的基元表示的最大值,那么您可能需要移动到BigInteger和BigDecimal 。

尝试使用BigDecimal.toBigInteger()方法和BigDecimal和BigInteger上的toString()方法。

如果您使用新的DecimalFormat(“0。#”),您缺少数据,例如PI = 3.14,但是在解析之后, 这不是一个好的解决方案 3.1

另一种使用eval%1的解决方案? (int)d:d这次couse最大整数限制,再次丢失数据

我的解决方案正在运行,但这不是一个好主意

 res = removeLastChars(eval,".0"); private String removeLastChars(double eval, String text){ String res = String.valueOf(eval); int length = text.length(); if (res.length() > length){ res = res.substring((res.length() - length), res.length()).equals(text) ? res.substring(0, (res.length() - length)) : res; } return res; } 

请查看http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html

你只想要DecimalFormat(“0.0”)