Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 | ||
---|---|---|
forrige | Kapitel 24. Internationale programmer | næste |
Denne sektion går i dybden med den lokalafhængige klasse java.text.NumberFormat
som er velegnet til at formatere tal, beløb og procentstørrelser.
Klassen NumberFormat indeholder en række statiske fabriksmetoder, som returnerer specialiseret formateringsobjekter.
getInstance() getInstance(Locale locale) getCurrencyInstance() getCurrencyInstance(Locale locale) getIntegerInstance() getIntegerInstance(Locale locale) getNumberInstance() getNumberInstance(Locale locale) getPercentInstance() getPercentInstance(Locale locale)
getInstance(..)
er synonym med getNumberInstance(..)
, og returnerer det normale lokalafhængige NumberFormat
-objekt. getCurrencyInstance(..)
er beregnet til beløb, getIntegerInstance(..)
til heltal og getPercentInstance(..)
til procentstørrelser.
Uanset om man arbejder med heltal eller decimaltal så kan det være nyttigt at justere på antallet af cifre der skal vises før og efter et eventuelt decimaltegn. I Danmark er det f.eks. meget normalt at beløbsstørrelser vises med præcis to betydende decimaler. Dette hjælper følgende metoder med:
setMaximumIntegerDigits(int vaerdi) setMinimumIntegerDigits(int vaerdi) setMaximumFractionDigits(int vaerdi) setMinimumFractionDigits(int vaerdi)
De to første metoder omhandler heltalsdelen af et tal, men de to andre omhandler decimaldelen. setMaximumXXX(8)
betyder at der vises højest 8 cifre i enten heltal- eller decimaldelen, mens setMinimumXXX(2)
betyder at der vises mindst 2 cifre. Overskydende cifre skæres væk mens manglende cifre erstattes med nuller.
Nedenstående eksempel viser brugen af NumberFormat
-klassen.
package dk.sslug; import java.util.Locale; import java.text.DecimalFormat; import java.text.NumberFormat; public class Talformatering { public static void main(String[] args) { Locale[] locales = NumberFormat.getAvailableLocales(); for (int i = 0; i < locales.length; i++) { System.out.println(locales[i].toString()); formaterTal(locales[i]); formaterBeloeb(locales[i]); formaterProcent(locales[i]); System.out.println(); } } public static void formaterTal(Locale locale) { NumberFormat nf = NumberFormat.getNumberInstance(locale); String heltal = nf.format(123456789); String decimaltal = nf.format(123456.789); System.out.println(heltal); System.out.println(decimaltal); } public static void formaterBeloeb(Locale locale) { NumberFormat cf = NumberFormat.getCurrencyInstance(locale); cf.setMaximumFractionDigits(2); String beloeb = cf.format(123456.789); System.out.println(beloeb); } public static void formaterProcent(Locale locale) { NumberFormat pf = NumberFormat.getPercentInstance(locale); String procent = pf.format(1.42); System.out.println(procent); } }
Eksemplet gennemløber alle lokalindstillinger, som NumberFormat explicit kender. Et udsnit af resultatet ved at køre ovenstående program er vist her forneden.
... da 123.456.789 123.456,789 ¤ 123.456,79 142% da_DK 123.456.789 123.456,789 kr 123.456,79 142% ... en_CA 123,456,789 123,456.789 $123,456.79 142% en_GB 123,456,789 123,456.789 £123,456.79 142% ...