考虑
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
似乎正在寻找的。