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

在Java中,如何删除浮点中的所有0?,java,floating-point,zero,Java,Floating Point,Zero,我想这样改变浮动: 10.5000->10.5 10.0000->10 如何删除小数点后的所有零,并将其更改为float(如果有非零)或int(如果只有零) 提前谢谢 根据需要为输出设置数字格式。无法删除内部“0”值。请尝试使用System.out.format 这里有一个允许c风格格式的链接 这将使用两种不同的格式化程序处理它: double d = 10.5F; DecimalFormat formatter = new DecimalFormat("0"); DecimalFormat d

我想这样改变浮动:

10.5000->10.5 10.0000->10

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


提前谢谢

根据需要为输出设置数字格式。无法删除内部“0”值。

请尝试使用System.out.format

这里有一个允许c风格格式的链接

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

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);
为什么不试试regexp呢

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

BigDecimal有一个stripTrailingZeros()方法,它将实现您想要的

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

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

Float.toString(10.5000); // => "10.5"
Float.toString(10.0000); // => "10.0"
您可以使用修复“10.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

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

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

我不太明白。零只是文本表示的产物,它们与浮点的内部表示方式无关。您正在寻找自定义输出格式来抑制尾随零吗?这没有什么意义,因为
新浮点(10.25000f)。toString()
已经为您提供了“10.25”,所以
。replaceAll(“0*$”,“”)
没有任何用处。
“\.0+$”
如果您还想去掉句点。如果我将“0*$”更改为“\.0+$”,它会说“意外字符:'.'.'-实际上我正在处理。@user1076206必须转义反斜杠“\\\.0+$”。谢谢Daniel,它成功了。我还使用了replaceAll(“0*$”,“”)。replace(“.”,“”).实际上,出于视觉原因,我在结尾添加了一个空格。+1表示十进制格式。此外,十进制格式使用半偶数舍入。非常感谢。我没有说明我实际上正在处理。regexp在我的案例中更简单。你能从链接添加一些内容吗?
new java.text.DecimalFormat("#.#").format(10.50000);