【问题标题】:DecimalFormat pattern十进制格式模式
【发布时间】:2011-12-14 10:31:45
【问题描述】:
public static String formatAmountUpToTwoDecimalNumber(String amount)
    {       
        if(amount==null || "".equals(amount))
        {
             return "";
        }  
        Double doubleAmount = Double.valueOf(amount);
        double myAmount = doubleAmount.doubleValue();
        NumberFormat f = new DecimalFormat("###,###,###,###,##0.00");
        String s = f.format(myAmount);
        return s;
    }

"###,###,###,###,##0.00",这个模式的目的到底是什么?我相信它有两个目的

  1. 对数字进行分组,即用千位逗号分隔
  2. 如果小数点缺失,则在小数点后附加两个零,将 23 转换为 23.00

但是为什么小数点前有"0" 而不是"#"?这个零的目的到底是什么? 谢谢您的帮助。

【问题讨论】:

    标签: java decimalformat


    【解决方案1】:
    Symbol  Location    Localized?  Meaning
    0       Number      Yes         Digit
    #       Number      Yes         Digit, zero shows as absent 
    

    发件人:http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html

    所以#在没有数字时不会显示。前导 0 表示小数分隔符前至少有 1 位数字。

    【讨论】:

    • 感谢我查看了文档,但无法真正理解。我很困惑,不应该按字面意思取零吗?
    • 如文档中所述,在格式字符串中使用时不应将零视为文字。
    • "会有至少 1 位数字",你是不是想说如果我通过 0.7,小数点前没有数字,它会在附加前导零后返回 0.70?
    • +1,但请不要链接到文档。对于过时的 JRE。网址已调整。
    • 谢谢安德鲁。没注意到。
    【解决方案2】:

    # 仅在数字不是前导零时才会输入数字。 0 将放置一个数字,即使它是尾随零。如果您想打印固定数量的数字,您也可以在前面使用零。

    【讨论】:

      【解决方案3】:

      在 dp 前加上零,0.23 之类的小数字将显示为 0.23。没有它,您将不会得到前导零,因此它仅显示为 0.23。如果你有像 excel 这样的电子表格,你也可以在那里查看。

      【讨论】:

      • 我刚刚用###.### 进行了测试,得到了 0.23,这很烦人,因为我不希望我正在做的事情前导零
      • @MikeB - 我刚刚检查了 Excel 2003,如果单元格格式为 ###.###,前导零肯定会被删除
      • @DaveRiz 但这是一个 java 问题
      • @MikeB - 是的,我知道 - 但同样的原则也适用于 excel。我是一名java程序员,我使用excel作为工具来说明这一点。
      • 我相信 java 应该做 Excel 正在做的事情,但在我看来并非如此。这个测试在 java 中对我来说失败了,:assertThat(new DecimalFormat("###.###").format(0.23d), is(".23"));
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      相关资源
      最近更新 更多