User Tools

Site Tools


linuxbog:java:java-i18n-formatering-tal
Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31
forrige Kapitel 24. Internationale programmer 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%

...

forrige hjem næste
Formatering af datoer og klokkeslæt op Tekster og tegn
linuxbog/java/java-i18n-formatering-tal.txt · Last modified: by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

Brug af AI : Al tekst kán være uddrag af AI genereret tekst og kan være fejlbehæftet.
AI kan lave fejl og det kan mennesker også, men al tekst er gennemgået af et menneske for fejl, og personlig bias kan være tilføjet.