// Formatage de valeurs numériques décimales en Java // Formatage de valeurs numériques décimales // Classe MonFormat et méthode formate // La classe Format ne sert qu'à présentetr des exemples. // Présentation de nombres déciamux, cadrés à droite, sur un nombre // de colonnes choisi, et un nombre de chiffres dans la partie décimale, // également choisi. // La présentation avec mantisse et exposant est aussi définie. // import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; public class Format { Format () { } public static void main(String []args) { double d=9870.654321; MonFormat mf; /* mf = new MonFormat(10); System.out.println("Avec zéros en tête non significatifs"); mf.zeroDevant=true; System.out.println(" "+ "1234567890"+" "+"1234567890"); System.out.println(" "+mf.formate(d)+" "+mf.formate(-123.5)); System.out.println("Cadrage correct"); mf.applyPattern("0.00E00");// mf.setMaximumIntegerDigits(2); mf.zeroDevant=false; System.out.println(" "+ "1234567890"+" "+"1234567890"); System.out.println(" "+mf.formate(d)+" "+mf.formate(-123.4)); System.out.println("Valeur négative plus longue"); mf = new MonFormat(7); mf.applyPattern("0.00E00");// mf.setMaximumIntegerDigits(2); System.out.println(" "+ "1234567"+" "+"1234567"); System.out.println(" "+mf.formate(d)+" "+mf.formate(-d)); System.out.println("4 chiffres après la virgule, cadrage correct"); mf = new MonFormat(11,4); System.out.println(" "+"12345678901"+" "+"12345678901"); System.out.println(" "+mf.formate(d)+" "+mf.formate(-d)); System.out.println("Valeurs positive et négative plus longues"); mf = new MonFormat(8,4); System.out.println(" "+ "12345678"+" "+"12345678"); System.out.println(" "+mf.formate(d)+" "+mf.formate(-d)); */ mf = new MonFormat('E',11); System.out.println(" "+mf.formate(d*1.e-5)+" " +mf.formate(-123.4*1.e-5)+" "+mf.toPattern()); System.out.println(" "+mf.formate(d*1.e5)+" " +mf.formate(-123.4*1.e5)+" "+mf.toPattern()); mf.zeroDevant=true; System.out.println(" "+mf.formate(d*1.e-5)+" " +mf.formate(-123.4*1.e-5)+" "+mf.toPattern()); mf = new MonFormat('E',11,4); System.out.println(" "+mf.formate(d*1.e+5)+" " +mf.formate(-1.4*1.e+5)+" "+mf.toPattern()); System.out.println(" "+mf.formate(d*1.e-5)+" " +mf.formate(-1.4*1.e-5)+" "+mf.toPattern()); mf.zeroDevant=true; System.out.println(" "+mf.formate(d*1.e+4)+" " +mf.formate(-123.4*1.e+4)+" "+mf.toPattern()); } } /** Présentation de nombres déciamux, cadrés à droite, sur un nombre de colonnes choisi, et un nombre de chiffres dans la partie décimale, également choisi. La présentation avec mantisse et exposant est aussi définie. */ class MonFormat extends DecimalFormat { /** nb.chifres total minimum (la chaîne fournie peut être plus longue) */ int nTot; /** nb.chifres dans la partie décimale */ int nDec; /** si vrai, des zéros complètent à gauche; à éviter en notation scientifique c'est à dire avec mantisse et exposant */ public boolean zeroDevant; /** Notation fixe, 2 chiffres décimaux (après le '.') exemple: 456.78 */ public MonFormat(int ntot) { super("#.#"); init(ntot,2); } /** Notation fixee, ndec chiffres décimaux (après le '.') exemple, avec ndec=4: -0.0456 */ public MonFormat(int ntot,int ndec) { super("#.#"); init(ntot,ndec); } /** Notation scientifique, 2 chiffres décimaux; exposant: 2 chiffres exemple: 3.14E+12 */ public MonFormat(char c,int ntot) { super("0.00E00"); init(ntot,2); } /** Notation scientifique, ndec chiffres décimaux; exposant: 2 chiffres exemple, avec ndec=4 : 3.1416E-03 */ public MonFormat(char c,int ntot,int ndec) { super("0.00E00"); init(ntot,ndec); } private void init(int ntot, int ndec) { nTot=(ntot<0)?0:ntot; nDec=(ndec<0)?2:ndec; this.setMaximumFractionDigits(nDec); this.setMinimumFractionDigits(nDec); DecimalFormatSymbols fs = new DecimalFormatSymbols(); fs.setDecimalSeparator('.'); this.setDecimalFormatSymbols(fs); zeroDevant=false; } public String formate(double d) { String res=null; if(zeroDevant) { setMinimumIntegerDigits(nTot-(d<0?2:1)-nDec); res=format(d); setMinimumIntegerDigits(0); } else { res=format(d); int pos=res.indexOf("E"); if(pos>0 && res.charAt(1+pos)!='-') { res=res.substring(0,pos)+"E+"+res.substring(pos+1,res.length()); } int lres=res.length(); if(lres<nTot) { // Ajout d'espaces String esp=" "; res = esp.substring(0, nTot-lres)+res; } } return res; } } //fin Format.java