在串起 Double 时,如何抑制整数情况的".0"自动后缀?

  • 本文关键字:后缀 情况 整数 Double 何抑制 java
  • 更新时间 :
  • 英文 :


考虑

Double f = 2.0;
String s = f.toString();

生成的字符串s为" 2.0"。如何格式化f,以便在f没有小数零件的情况下没有 .0附加的情况?(对于f具有小数零件的情况,我需要包括在内。(。是的,由于某种原因,Double上的toString()方法在Double是整数的情况下附加.0

一个讨厌的黑客将是

f % 1.0 == 0.0 ? new Integer(f.intValue()).toString() : f.toString();

但对我来说看起来很糟糕。

如果我正确理解您的问题,则可以尝试以下操作:

    double f = 2.0;
    int i = (int)f;
    if (i==f){
        String s = String.valueOf(new DecimalFormat("#").format(f));
        System.out.println(s);
    }
    else{
        String s = String.valueOf(new DecimalFormat("#.###").format(f)); // for example
        System.out.println(s);
    }
}
//now if the number after the point is fully zero, it will not take it

结果

f=2.0 -> s=2
f=2.005 -> s=2.005

编辑:在几行之后,如果没有特定的"数字数" - 十进制之后 ->您可以像这样的三元运算符

使用三元运算符
double f = 2.000;
int i = (int)f;
String s = (f==i)? String.valueOf(i): String.valueOf(f);
System.out.println(s);

使用数字格式(用于更高级格式(

NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(f));

似乎没有琐碎的格式。使用(感谢@Thomas简化整数案例(

f % 1.0 == 0.0 ? String.valueOf(f.intValue()) : f.toString();

似乎是最好的方法。

f % 1.0是测试Java中积分f的好方法。

您可以使用几个类的几种帮助方法来达到相同的结果:

    Double f = 2.0;
    String s = null;
    // option1: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#valueOf-int-
    s = String.valueOf(f.intValue());
    System.out.println(s);
    // option2: https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#toString-int-
    s = Integer.toString(f.intValue());
    System.out.println(s);
    // option3: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...-
    s = String.format("%.0f", f);
    System.out.println(s);
    // option4: https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html#DecimalFormat-java.lang.String-
    s = new DecimalFormat("#").format(f);
    System.out.println(s);

对于:

的输入
Double f = 21231.232222323;

输出将是: 21231

如评论中所建议的,尝试 DecimalFormat

static void show(double v){
    DecimalFormat format = new DecimalFormat("##########.##");
    System.out.println(format.format(v));
}
public static void main (String[] args) throws java.lang.Exception
{
    show(1.1);
    show(1.0);
    show(1.15);
    show(1.116);
}

排名将是:

1.1

1

1.15

1.12

似乎正在寻找的。

相关内容