【问题标题】:Java add leading zeros to a numberJava 将前导零添加到数字
【发布时间】:2011-02-03 02:19:29
【问题描述】:

我需要以 xxx-xxxx 形式返回一个字符串,其中 xxx 是一个数字,而 xxxx 是另一个数字,但是当我有前导零时,它们就会消失。我正在尝试数字格式化程序,但它不起作用。

 public String toString(){
        NumberFormat nf3 = new DecimalFormat("#000");
        NumberFormat nf4 = new DecimalFormat("#0000");
        if( areaCode != 0)
            return nf3.format(areaCode) + "-" + nf3.format(exchangeCode) + "-" + nf4.format(number);
        else
            return exchangeCode + "-" + number;
    }

}

我想通了:

 public String toString(){
        NumberFormat nf3 = new DecimalFormat("000");
        NumberFormat nf4 = new DecimalFormat("0000");
        if( areaCode != 0)
            //myFormat.format(new Integer(someValue));
            return nf3.format(new Integer(areaCode)) + "-" + nf3.format(new Integer(exchangeCode)) + "-" + nf4.format(new Integer(number));
        else
            return nf3.format(new Integer(exchangeCode)) + "-" + nf4.format(new Integer(number));
    }

【问题讨论】:

  • 嘿,所以我的答案是不正确的删除# 符号? :P
  • 删除 # 为我修复了它。我需要一个前导 0,所以我只使用了 ("00") 并且它起作用了。

标签: java string number-formatting


【解决方案1】:

去掉#号

http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html

这段代码:

import java.text.DecimalFormat;
import java.text.NumberFormat;


public class Test
{

    public static void main(String[] args) 
    {       
        int areaCode = 123;
        int exchangeCode = 456;

        NumberFormat nf3 = new DecimalFormat("0000");

        System.out.println(nf3.format(areaCode) + "-" + nf3.format(exchangeCode) );
    }

}

产生这个输出:

0123-0456

【讨论】:

  • 这不是他想要的。格式不应该是 2 个 4 位数字。是电话号码格式,###-####。
  • 嗯,重点不是要复制他的问题,而是要展示如何添加前导零......这种方式有效
【解决方案2】:

areaCode 为 0 时,忘记拨打format!除此之外,它看起来还不错。前导“#”不是必需的,但不会对有效输入造成任何问题。

我刚刚试了一下,很快就检查出来了,对我来说效果很好。

public static String formatTest(int areaCode, int exchangeCode, int number) {
    DecimalFormat nf3 = new DecimalFormat("#000");
    DecimalFormat nf4 = new DecimalFormat("#0000");
    if( areaCode != 0)
        return nf3.format(areaCode) + "-" + nf3.format(exchangeCode) + "-" + nf4.format(number);
    else
        return nf3.format(exchangeCode) + "-" + nf4.format(number);
}


public static void main(String[] args) {
    System.out.println(formatTest(12, 90, 8));
    System.out.println(formatTest(1, 953, 1932));
}

输出:

012-090-0008
001-953-1932

【讨论】:

  • 无意冒犯,但是 String.format 是处理这个问题的最简单方法。
  • 未拍摄。字符串格式确实更优雅,但发帖人已经有了使用 DecimalFormat 的解决方案,只是在问为什么它不起作用。
【解决方案3】:

有一个可以说是更优雅的解决方案:

String.format("%03d-%03d-%04d", areaCode, exchangeCode, number)

【讨论】:

  • +1 更加优雅和简洁。不会想到任何其他解决方案。
  • 废话。 20 年的开发人员,我不知道。 [这家伙感觉太傻了......]谢谢分享。
【解决方案4】:

我建议使用 NumberFormat (http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html)

在我看来,它提供了最好的可读性。当您将错误的字符串放入 DecimalFormat 时,还可以最大限度地减少出错的可能性。

  final int value1 = 1; 
  final double value2 = 4.2;

  NumberFormat nf = NumberFormat.getInstance(Locale.US);
  nf.setMinimumIntegerDigits(2);

  System.out.println(nf.format(value1));
  System.out.println(nf.format(value2));

输出:

  01
  04.2

(区域设置是可选的,但我建议您在与国际团队合作时使用它。默认值是本地设置)

无论如何,这种方式的 NumberFormat 是一件很棒的事情,尤其是当您必须处理不同的国家或诸如百分比或货币之类的东西时

【讨论】:

    【解决方案5】:

    您可以使用 NumberFormat 类并将最小零轻松设置为 0,它就像货币格式的魅力一样:

       formatter = NumberFormat.getCurrencyInstance();
       formatter.setMinimumFractionDigits(0);
       -----------
       print ( formatter.format(119.00) ) ---> $119
    

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2011-11-03
      相关资源
      最近更新 更多