从双精度中删除.0

时间:2011-08-18 14:48:37

标签: java double long-integer

我正在尝试动态显示字符串中的数字,所以如果数字有十进制显示它们但是如果不显示.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);

这项工作很好,大约1e18然后会因为Long的最大大小而错误。 那么我如何在5.43e86等更大的数字上实现这一目标呢?

4 个答案:

答案 0 :(得分:23)

使用DecimalFormat

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

答案 1 :(得分:2)

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

如果您开始达到Java中基元可以表示的最大值,那么您可能需要转到BigIntegerBigDecimal

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

答案 2 :(得分:0)

这不是好解决方案 例如,如果使用新的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;
}

答案 3 :(得分:-4)

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

你只需要DecimalFormat(“0.0”)