^ Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 ^|
| [[java:java-i18n-formatering-dato|forrige]] | Kapitel 24. Internationale programmer | [[java:java-i18n-working-with-text|næste]] |
----
==== 24.6. Formatering af tal og beløb ====
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.
=== 24.6.1. Prædefineret formater ===
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%
...
----
| [[java:java-i18n-formatering-dato|forrige]] | [[java:index|hjem]] | [[java:java-i18n-working-with-text|næste]] |
| Formatering af datoer og klokkeslæt | [[java:java-i18n|op]] | Tekster og tegn |