2010-03-31 4 views
14

Je dois retourner une chaîne de la forme xxx-xxxx où xxx est un nombre et xxxx est un autre nombre, mais quand j'ai des zéros de tête ils disparaissent. J'essaye le formatter de nombre, mais cela ne fonctionne pas.Java ajouter des zéros à un nombre

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; 
    } 

}

I figured it out:

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)); 
    } 
+0

heh, alors ma réponse n'était pas correcte pour enlever le signe #? : P – Holograham

+0

Retrait du # fixé pour moi. J'avais besoin d'un 0 en tête, donc j'ai juste utilisé ("00") et ça a marché. – Opy

Répondre

15

Lorsque AreaCode est 0, vous oubliez d'appeler format! A part ça, ça a l'air bien. Les "#" en tête ne sont pas nécessaires, mais ne causeront aucun problème pour les entrées valides.

Je viens de l'essayer très rapidement pour vérifier et cela a bien fonctionné pour moi.

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)); 
} 

Sortie:

012-090-0008 
001-953-1932 
+1

Pas d'attaque mais, String.format est le moyen le plus facile de gérer cela. –

+1

Aucune prise. Le format de chaîne est en effet plus élégant, mais l'affiche avait déjà une solution utilisant DecimalFormat et demandait juste pourquoi elle ne fonctionnait pas. –

6

Retirez le signe #

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

Ce code:

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)); 
    } 

} 

produit cette sortie:

0123-0456

+0

non qui n'a pas fonctionné – user69514

+0

Ce n'est pas ce qu'il cherche. Le format n'est pas censé être 2 nombres à 4 chiffres. C'est le format du numéro de téléphone, ### - ####. –

+0

meh le point n'était pas de répliquer son problème c'était de montrer comment ajouter des zéros de premier plan ... de cette façon fonctionne – Holograham

23

Il y a une solution sans doute plus élégante:

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

+1 beaucoup plus élégant et concis. Je ne penserais à aucune autre solution. –

+0

Merde. 20 ans de développement et je ne le savais pas.[Ce mec se sent tellement stupide ...] Merci pour le partage. – Lawrence

+0

De rien, Lawrence. (-; –

2

Je recommanderais d'utiliser le NumberFormat (http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html)

À mon avis, il donne le meilleur lisibilité. Et minimise également la possibilité d'erreurs lorsque vous mettez une mauvaise chaîne dans le 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)); 

Sortie:

01 
    04.2 

(. La Locale est facultative, mais je le recommande lorsque vous travaillez avec une équipe internationale Valeur par défaut sont les paramètres locaux)

Quoi qu'il en soit NumberFormat de cette manière est une telle bonne chose, surtout si vous devez traiter avec différents pays ou des choses comme le pourcentage ou la monnaie