Java 如何抑制自动加后缀“quot;。0“;当串化双精度矩阵时,对于积分情形?
考虑Java 如何抑制自动加后缀“quot;。0“;当串化双精度矩阵时,对于积分情形?,java,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;
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;
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使用数字格式(用于更高级的格式)
似乎没有一个微不足道的格式化程序可以做到这一点。使用(感谢@Thomas简化了整型案例) 这似乎是最好的办法
f%1.0
是在Java中测试积分f
的好方法。如果我正确理解了您的问题,您可以尝试以下方法:
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);
按照注释中的建议,尝试
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.15
1.12
这似乎是您正在寻找的格式。使用
十进制格式
获取任何您喜欢的格式。顺便说一句,新整数(f.intValue()).toString()
->字符串.valueOf(f.intValue())
或“+f.intValue()
@Thomas:如果你这样写的话,三元结构看起来并没有那么糟糕。可能的三元结构的副本不是真的。这个复制是关于插入小数点和千位分隔符。我的是关于抑制不必要的。0这会保留2.1和666.6之类的小数部分吗?你是对的,我修正了答案。数字格式不应在不需要时打印不必要的小数。这会将123.456截断为123.45吗?会的,您可以跳过设置最大小数位数。它是用来演示格式化选项的。是的,单独处理整型案例似乎是唯一的方法。现在这太棒了。我更喜欢三元结构的对称性,而不是我的对称性。我真的不喜欢使用toString()
。非常感谢。我很高兴能帮上忙,但它们似乎会截断小数点,如2.1或123.456。你的意思是哪个选项?好的f.intVal
肯定会删除小数部分。我的理解是“%.0f”也会这样做,依此类推。否。1.116必须是1.116。你有最多的名额吗?只需添加更多的#
s。
double f = 2.000;
int i = (int)f;
String s = (f==i)? String.valueOf(i): String.valueOf(f);
System.out.println(s);
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);
}