strfmon(3C) strfmon(3C)
NAME
strfmon - Monetären Wert in Zeichenkette umwandeln
SYNTAX
#include <monetary.h>
ssizet strfmon(char *s, sizet maxsize, const char *format, ...);
BESCHREIBUNG
Die Funktion strfmon() bringt, gesteuert durch die Zeichenkette, auf
die format zeigt, Zeichen in das Feld, auf das s zeigt. Es werden
maximal maxsize Byte in das Feld gebracht.
format ist eine Zeichenkette, die zwei Arten von Objekten enthält:
normale Zeichen, die einfach in den Ausgabe-Stream kopiert werden, und
Umwandlungsanweisungen. Es werden keines oder mehr Argumente abge-
fragt, die konvertiert und formatiert werden. Die Ergebnisse sind
nicht definiert, wenn für das Format nicht genügend Argumente zur Ver-
fügung stehen. Wenn keine weiteren Formatangaben, aber noch Argumente
zur Verfügung stehen, werden die übrigen Argumente einfach ignoriert.
Eine Umwandlungsanweisung besteht aus:
- dem Zeichen %
- Flags (optional)
- Feldgröße (optional)
- Genauigkeit links (optional)
- Genauigkeit rechts (optional)
- ein Umwandlungszeichen, das die durchzuführende Umwandlung bestimmt
(Pflichtangabe).
Flags
Zur Steuerung der Umwandlung kann eines oder mehrere der folgenden,
optionalen Flags angegeben werden:
=f Das Gleichheitszeichen (=), gefolgt von genau einem Zeichen f,
das als numerisches Füllzeichen verwendet wird. Das Füllzeichen
muß wegen Genauigkeit und Anzahl für die Größe in einem Byte dar-
stellbar sein. Standardmäßig wird für das numerische Füllzeichen
das Leerzeichen verwendet. Dieses Flag hat keinen Einfluß auf das
Füllzeichen bei der Feldgröße. Hierfür wird immer das Leerzeichen
verwendet. Dieses Flag kommt nur dann zum Einsatz, wenn eine
Angabe für die Genauigkeit links gemacht wird (siehe unten).
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
strfmon(3C) strfmon(3C)
^ Währungsbetrag nicht mit Tausender-Trennzeichen und Dezimalzei-
chen formatieren. Standardmäßig werden die Tausender-Trennzeichen
und Dezimalzeichen eingefügt, wenn sie für die aktuelle Locale
(internationale Umgebung) definiert sind.
+ oder (
Angabe der Darstellung positiver und negativer Währungsbeträge.
Es darf immer nur eine der Angaben (also + oder ( ) gemacht wer-
den. Bei Angabe des Zeichens + wird die Entsprechung von + und -
in der jeweiligen Locale verwendet. So wird zum Beispiel für die
USA die leere Zeichenkette für positive und das Zeichen - für
negative Werte verwendet. Bei Angabe des Zeichens ( werden nega-
tive Beträge in Klammern dargestellt. Wird keine Angabe gemacht,
so wird das Flag + angenommen.
! Unterdrückung des Währungssymbols bei der Ausgabe-Umwandlung.
- Angabe der Ausrichtung. Wird dieses Flag angegeben, so werden
alle Felder linksbündig ausgerichtet (rechts aufgefüllt).
Feldgröße
w Eine Zeichenkette mit dezimalen Ziffern (w), die die Mindestfeld-
größe in Byte angibt. Das Ergebnis der Umwandlung wird rechtsbün-
dig (bzw. bei Angabe des Flags - auch linksbündig) formatiert.
Der Standardwert beträgt Null.
Genauigkeit links
#n Das Zeichen #, gefolgt von einer Zeichenkette mit dezimalen Zif-
fern (n). Hier wird die maximale Anzahl der Ziffern angegeben,
die links vom Dezimalzeichen formatiert werden sollen. Diese
Option kann dazu verwendet werden, die formatierte Ausgabe mehre-
rer Aufrufe der Funktion strfmon() in den gleichen Spalten auszu-
richten. Ebenso kann sie verwendet werden, um nicht verwendete
Positionen mit einem Sonderzeichen aufzufüllen (wie zum Beispiel
bei $***123.45). Diese Option hat zur Folge, daß ein Betrag so
formatiert wird, als ob er die in n angegebene Stellenanzahl
hätte. Wenn mehr als n Stellen benötigt werden, wird diese
Umwandlungsanweisung ignoriert. Stellen, die über die tatsächlich
benötigte Stellenanzahl hinausgehen, werden mit dem numerischen
Füllzeichen aufgefüllt (siehe unter dem Flag =f).
Wenn die Formatierung numerischer Werte nicht mit dem Flag ^
unterdrückt wurde und für die aktuelle Locale definiert ist, so
werden Tausender-Trennzeichen und Dezimalzeichen eingefügt, bevor
gegebenenfalls Füllzeichen angefügt werden. Tausender-Trenn-
zeichen und Dezimalzeichen werden nicht einmal dann für Füllzei-
chen angewendet, wenn das Füllzeichen eine Ziffer ist.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
strfmon(3C) strfmon(3C)
Zur Sicherstellung der Ausrichtung werden alle Zeichen, die in
der formatierten Ausgabe vor oder nach der Zahl erscheinen (z. B.
Währungssymbol oder Vorzeichen) je nach Bedarf mit Leerzeichen so
aufgefüllt, daß positive und negative Formate die gleiche Länge
haben.
Genauigkeit rechts
.p Ein Punkt, gefolgt von einer Zeichenkette mit dezimalen Ziffern
(p). Hier wird die Anzahl der Ziffern nach dem Dezimalzeichen
angegeben. Wenn der Wert von p gleich Null ist, erscheint kein
Dezimalzeichen. Wird diese Angabe nicht gemacht, wird der von der
aktuellen Locale angegebene Standardwert verwendet. Der forma-
tierte Betrag wird vor der Formatierung auf die angegebene Stel-
lenanzahl gerundet.
Umwandlungszeichen
Die Umwandlungszeichen haben die folgende Bedeutung:
i Das double Argument wird entsprechend dem internationalen Wäh-
rungsformat der Locale formatiert (in den USA zum Beispiel: USD
1,234.56).
n Das double Argument wird entsprechend dem nationalen Währungsfor-
mat der Locale formatiert (in den USA zum Beispiel: $1,234.56).
% In % umwandeln. Kein Argument wird umgewandelt. Die gesamte
Umwandlungsanweisung muß %% lauten.
Locale-Informationen
Die Kategorie LCMONETARY der Locale des Programms hat Auswirkungen
auf das Verhalten dieser Funktion. Die Auswirkungen betreffen unter
anderem das Dezimalzeichen für Währungsbeträge (dieses kann sich vom
numerischen Dezimalzeichen unterscheiden, das den Auswirkungen der
Kategorie LCNUMERIC unterliegt), die Tausender-Trennzeichen, die Wäh-
rungssymbole und -formate. Das internationale Währungssymbol sollte
dem Standard ISO 4217:1987 entsprechen.
Die Funktion strfmon() schlägt fehl, wenn:
ENOSYS Die Funktion wird nicht unterstützt.
E2BIG Die Umwandlung wurde angehalten, weil nicht genügend Platz
im Puffer zur Verfügung steht.
ERGEBNIS
Wenn die Gesamtzahl der Bytes für das Ergebnis (einschließlich
abschließendem Nullbyte) nicht mehr als maxsize beträgt, gibt die
Funktion strfmon() die Anzahl der Bytes zurück, die in dem Feld abge-
legt wurden, auf das s zeigt (dies schließt das abschließende Nullbyte
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
strfmon(3C) strfmon(3C)
nicht mit ein). Andernfalls wird -1 zurückgegeben, und der Inhalt des
Feldes ist nicht definiert. errno wird auf den Fehler gesetzt.
BEISPIELE
Für diese Beispiele werden eine Locale für die USA und die Werte
123.45, -123.45 und 3456.781 vorausgesetzt:
______________________________________________________________________
| Umwandlungs- | | |
| anweisung | Ausgabe | Anmerkungen |
|______________|_________________|____________________________________|
| %n | $123.45 | Standardformatierung |
| | -$123.45 | |
| | $ 3,456.78 | |
|______________|_________________|____________________________________|
| %11n | $123.45 | Ausrichtung nach rechts in einem |
| | -$123.45 | Feld mit 11 Zeichen |
| | $ 3,456.78 | |
|______________|_________________|____________________________________|
| %#5n | $123.45 | ausgerichtete Spalten für Werte |
| | -$ 123.45 | bis max. 99,999 |
| | $ 3,456.78 | |
|______________|_________________|____________________________________|
| %=*#5n | $***123.45 | Angabe eines Füllzeichens |
| | -$***123.45 | |
| | $*3,456.78 | |
|______________|_________________|____________________________________|
| %=0#5n | $000123.45 | Füllzeichen werden nicht formatiert|
| | -$000123.45 | (auch nicht, wenn es sich um |
| | $03, 456.78 | Ziffern handelt) |
|______________|_________________|____________________________________|
| %^#5n | $ 123.45 | Tausender-Trennzeichen deaktivieren|
| | - $ 123.45 | |
| | $ 3456.78 | |
|______________|_________________|____________________________________|
| %^#5.0n | $ 123 | Runden |
| | -$ 123 | |
| | $ 3457 | |
|______________|_________________|____________________________________|
| %^#5.4n | $ 123.4500| erhöhte Genauigkeit |
| | -$ 123.4500| |
| | $ 3456.7810| |
|______________|_________________|____________________________________|
| %(#5n | 123.45 | andere Darstellung für |
| | ($ 123.45) | positive/negative Werte |
| | $ 3,456.78 | |
|______________|_________________|____________________________________|
| %!(#5n | 123.45 | Währungssymbol deaktivieren |
| | ( 123.45) | |
| | 3,456.78 | |
|______________|_________________|____________________________________|
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
strfmon(3C) strfmon(3C)
SIEHE AUCH
localeconv(3C).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98