Java 如何使用DecimalFormat不显示小数点,除非必要

Java 如何使用DecimalFormat不显示小数点,除非必要,java,formatting,decimalformat,Java,Formatting,Decimalformat,我正在修改以下代码以设置双精度格式:“####,##0.#####”。它通常是按它应该的方式工作的,但是当我有一个像“123”这样的数字时,它会显示为“123.0”。在这种情况下,如何避免输出小数位?我只想“123”出现 阅读Java教程后,似乎不应该在小数点后显示任何内容,因为格式化字符串中小数点后的所有内容都是磅符号,而不是0。但事实并非如此 另外,为什么在格式化字符串中,0位于第一位小数点之前 编辑:我的完整代码如下。我是这个项目的新手,仍在试图弄清楚它为什么会这样做: textField

我正在修改以下代码以设置双精度格式:“####,##0.#####”。它通常是按它应该的方式工作的,但是当我有一个像“123”这样的数字时,它会显示为“123.0”。在这种情况下,如何避免输出小数位?我只想“123”出现

阅读Java教程后,似乎不应该在小数点后显示任何内容,因为格式化字符串中小数点后的所有内容都是磅符号,而不是0。但事实并非如此

另外,为什么在格式化字符串中,0位于第一位小数点之前

编辑:我的完整代码如下。我是这个项目的新手,仍在试图弄清楚它为什么会这样做:

textField = new TextField("field", Double.class) {
    public org.apache.wicket.util.convert.IConverter getConverter(
            Class type) {
        DoubleConverter converter = (DoubleConverter) DoubleConverter.INSTANCE;
        java.text.NumberFormat numberFormat = converter
                .getNumberFormat(getLocale());
        java.text.DecimalFormat decimalFormat = (java.text.DecimalFormat) numberFormat;
        decimalFormat.applyPattern("###,##0.#########");
        converter.setNumberFormat(getLocale(),
                decimalFormat);
        return converter;
    };
};

答案后得到0的原因是,您已将答案设置为双精度。双精度设置为十进制答案。如果没有小数点后的答案,它会自动将其置为0,因为小数点后一定有东西


如果要去掉答案后的0,最简单的方法是将答案改为整数。但是,使用if语句检查小数点后是否只有一个0,这将允许您同时拥有整数答案和双精度答案。

使用
DecimalFormat
中的格式字符串,我得到的
double
值打印为
123
,而不是
123.0
@argetman,你说得对。我只是在我编写的一个单独的测试程序中测试了同样的东西。但看起来这还不是全部。我已经粘贴了上面的全部代码。也许你应该考虑重新解决这个问题?这似乎是wicket代码中发生的事情,而不是
DecimalFormat
代码。您是否尝试过在
DecimalFormat.format()
中放置调试断点?看看它在什么地方、什么时候被调用,以及当时的情况如何?你测试过你写的东西吗?因为你错了-如果你使用一个模式被设置为
###################
十进制格式,你会得到
123
。非
123.0