从双精度中删除.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”)