DecimalFormat 负模式奇怪?

Posted

技术标签:

【中文标题】DecimalFormat 负模式奇怪?【英文标题】:DecimalFormat negative pattern oddity? 【发布时间】:2014-08-12 23:10:52 【问题描述】:

我在 Google 或 SO 中找不到答案,这让我很烦。

阅读the javadocs,我发现“如果有明确的否定子模式,它仅用于指定否定前缀和后缀;位数、最小位数和其他特征都与肯定模式相同。这意味着 "#,##0.0#;(#)" 产生与 "#,##0.0#;(#,##0.0#)" 完全相同的行为。但是,此代码似乎没有遵循:

import java.text.DecimalFormat;

public class NumberFormatTest 
    public static void main(String args[]) 
        DecimalFormat df = new DecimalFormat("#,###;(#,###)");
        System.out.println(df.format(-1234.0));

        df.applyPattern("#,###;(#)");
        System.out.println(df.format(-1234.0));
    

给出一个输出

(1,234)
(1,234

(注意第 2 行中缺少的括号)

我错过了什么?

【问题讨论】:

【参考方案1】:

十进制格式中的错误。请参阅错误报告http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6609740

【讨论】:

【参考方案2】:

尝试一下

    DecimalFormat df=new DecimalFormat("#,##0.0");
    System.out.println(df.format(-12999.0));// the output is: -12 999,0

这是有效的

【讨论】:

确实如此,但它没有回答问题。

以上是关于DecimalFormat 负模式奇怪?的主要内容,如果未能解决你的问题,请参考以下文章

DecimalFormat类

Java - Decimal Format.parse 返回具有指定小数位数的双精度值

decimal.JS 快速入门

go使用decimal

decimal 在JAVA里怎么表示?

Java 为啥不提供decimal