除非需要使用 DecimalFormat,否则如何不显示小数位

Posted

技术标签:

【中文标题】除非需要使用 DecimalFormat,否则如何不显示小数位【英文标题】:How to not display decimal places unless necessary with DecimalFormat 【发布时间】:2013-11-14 18:54:07 【问题描述】:

我正在修改以下代码以格式化双精度:“###,##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;
    ;
;

【问题讨论】:

使用DecimalFormat 中的格式字符串,我得到double 值以打印为123,而不是123.0 @rgettman ,你是对的。我只是在我编写的一个单独的测试程序中测试了同样的东西。但看起来这还不是全部。我已经粘贴了上面的完整代码。 也许您应该考虑重新提出问题?这似乎是检票口代码中发生的事情,而不是DecimalFormat 代码。您是否尝试在DecimalFormat.format() 中放置调试断点?查看实际调用它的位置和时间,以及当时的情况? 【参考方案1】:

答案后得到 0 的原因是因为您将答案设置为 double。双打设置为十进制答案。如果没有小数的答案,它会自动将其设置为 0,因为小数点后必须有东西。

如果您想去掉答案后的 0,最简单的方法是将答案更改为整数。但是,如果使用 if 语句检查小数点后是否只有一个 0,则可以同时得到整数答案和双精度答案。

【讨论】:

你测试过你写的东西吗?因为你错了——如果你使用DecimalFormat,其模式设置为###,##0.#######,格式为123.0,你会得到123。不是123.0

以上是关于除非需要使用 DecimalFormat,否则如何不显示小数位的主要内容,如果未能解决你的问题,请参考以下文章

除非函数,否则如何模拟 Express JWT?

除非用户单击特定按钮,否则如何向用户显示警报框

使用 DecimalFormat 时如何防止减号?

除非在 shift 键绕过模式下,否则进度条不显示

除非选择单选按钮,否则如何使复选框变灰?

除非使用 turbolinks 和 rails 4 重新加载页面,否则 javascript 不会执行