在Java中,如何删除float中的所有0?

我想像这样改变浮动:

10.5000 – > 10.5 10.0000 – > 10

如何删除小数点后的所有零,并将其更改为float(如果有非零)或int(如果只有零)?

提前致谢。

为什么不试试regexp?

new Float(10.25000f).toString().replaceAll("\\.?0*$", "") 

诀窍是浮动和双打本身并没有真正的尾随零; 它只是打印(或初始化为文字)的方式,可以显示它们。 考虑这些例子:

 Float.toString(10.5000); // => "10.5" Float.toString(10.0000); // => "10.0" 

您可以使用DecimalFormat来修复“10.0”的示例:

 new java.text.DecimalFormat("#").format(10.0); // => "10" 

java.math.BigDecimal有一个stripTrailingZeros()方法,它将实现你正在寻找的东西。

 BigDecimal myDecimal = new BigDecimal(myValue); myDecimal.stripTrailingZeros(); myValue = myDecimal.floatValue(); 

这用两种不同的格式化程序处理它:

 double d = 10.5F; DecimalFormat formatter = new DecimalFormat("0"); DecimalFormat decimalFormatter = new DecimalFormat("0.0"); String s; if (d % 1L > 0L) s = decimalFormatter.format(d); else s = formatter.format(d); System.out.println("s: " + s); 

根据需要格式化输出的数字。 您无法删除内部“0”值。

您只需要使用以下格式类:

 new java.text.DecimalFormat("#.#").format(10.50000); new java.text.DecimalFormat("#.#").format(10.00000); 

尝试使用System.out.format

下面是一个允许c样式格式化的链接http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

我有同样的问题,并在以下链接中找到一个解决方法: StackOverFlow – 如何很好地格式化浮点数到字符串没有不必要的小数0

JasonD的答案就是我所遵循的答案。 它不依赖于语言环境,这对我的问题有好处,并且对于长值没有任何问题。

希望这有帮助。

从以上链接添加内容:

 public static String fmt(double d) { if(d == (long) d) return String.format("%d",(long)d); else return String.format("%s",d); } 

生产:

 232 0.18 1237875192 4.58 0 1.2345