]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man3/strfmon.3
Wrapped long lines, wrapped at sentence boundaries; stripped trailing
[thirdparty/man-pages.git] / man3 / strfmon.3
CommitLineData
fea681da
MK
1.\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
2.\"
3.\" This is free documentation; you can redistribute it and/or
4.\" modify it under the terms of the GNU General Public License as
5.\" published by the Free Software Foundation; either version 2 of
6.\" the License, or (at your option) any later version.
7.\"
8.\" The GNU General Public License's references to "object code"
9.\" and "executables" are to be interpreted as the output of any
10.\" document formatting or typesetting system, including
11.\" intermediate and printed output.
12.\"
13.\" This manual is distributed in the hope that it will be useful,
14.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
15.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16.\" GNU General Public License for more details.
17.\"
18.\" You should have received a copy of the GNU General Public
19.\" License along with this manual; if not, write to the Free
20.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
21.\" USA.
22.\"
23.TH STRFMON 3 2000-12-05 "Linux" "Linux Programmer's Manual"
24.SH NAME
25strfmon \- convert monetary value to a string
26.SH SYNOPSIS
fea681da
MK
27.B #include <monetary.h>
28.sp
29.BI "ssize_t strfmon(char *" s ", size_t " max ", const char *" format ,
30.B "...);"
fea681da 31.SH DESCRIPTION
63aa9df0 32The \fBstrfmon\fP() function formats the specified amounts
fea681da
MK
33according to the format specification \fIformat\fP and places the
34result in the character array \fIs\fP of size \fImax\fP.
35.PP
36Ordinary characters in \fIformat\fP are copied to \fIs\fP
c13182ef
MK
37without conversion.
38Conversion specifiers are introduced by a `%'
39character.
40Immediately following it there can be zero or more
fea681da
MK
41of the following flags:
42.TP
43.BI = f
44The single-byte character
45.I f
46is used as the numeric fill character (to be used with
47a left precision, see below).
48When not specified, the space character is used.
49.TP
50.B ^
51Do not use any grouping characters that might be defined
c13182ef
MK
52for the current locale.
53By default, grouping is enabled.
fea681da
MK
54.TP
55.BR ( " or " +
56The ( flag indicates that negative amounts should be enclosed between
c13182ef
MK
57parentheses.
58The + flag indicates that signs should be handled
fea681da 59in the default way, that is, amounts are preceded by the locale's
8c383102 60sign indication, e.g., nothing for positive, "\-" for negative.
fea681da
MK
61.TP
62.BR !
63Omit the currency symbol.
64.TP
65.BR \-
c13182ef
MK
66Left justify all fields.
67The default is right justification.
fea681da
MK
68.LP
69Next, there may be a field width: a decimal digit string specifying
c13182ef
MK
70a minimum field width in bytes.
71The default is 0.
fea681da
MK
72A result smaller than this width is padded with spaces
73(on the left, unless the left-justify flag was given).
74.LP
75Next, there may be a left precision of the form "#" followed by
c13182ef
MK
76a decimal digit string.
77If the number of digits left of the
fea681da
MK
78radix character is smaller than this, the representation is
79padded on the left with the numeric fill character.
80Grouping characters are not counted in this field width.
81.LP
82Next, there may be a right precision of the form "." followed by
c13182ef
MK
83a decimal digit string.
84The amount being formatted is rounded to
fea681da
MK
85the specified number of digits prior to formatting.
86The default is specified in the
87.I frac_digits
88and
89.I int_frac_digits
90items of the current locale.
91If the right precision is 0, no radix character is printed.
92(The radix character here is determined by LC_MONETARY, and may
93differ from that specified by LC_NUMERIC.)
94.LP
95Finally, the conversion specification must be ended with a
c13182ef
MK
96conversion character.
97The three conversion characters are
fea681da
MK
98.TP
99.B %
100(In this case the entire specification must be exactly "%%".)
101Put a `%' character in the result string.
102.TP
103.B i
104One argument of type double is converted using the locale's
105international currency format.
106.TP
107.B n
108One argument of type double is converted using the locale's
109national currency format.
110.SH "RETURN VALUE"
63aa9df0 111The \fBstrfmon\fP() function returns the number of characters placed
28d88c17
MK
112in the array \fIs\fP, not including the terminating null byte,
113provided the string, including the terminating null byte, fits.
fea681da
MK
114Otherwise, it sets
115.I errno
116to E2BIG, returns \-1, and the contents of the array is undefined.
117.SH EXAMPLE
118The call
119.RS
120.nf
b9f02710 121
fea681da
MK
122strfmon(buf, sizeof(buf), "[%^=*#6n] [%=*#6i]",
123 1234.567, 1234.567);
b9f02710 124
fea681da
MK
125.fi
126.RE
127outputs
128.RS
b9f02710 129
fea681da 130[ fl **1234,57] [ NLG **1 234,57]
b9f02710 131
fea681da
MK
132.RE
133in the Dutch locale (with fl for "florijnen" and NLG for Netherlands Guilders).
134The grouping character is very ugly because it takes as much space
135as a digit, while it should not take more than half that,
136and will no doubt cause confusion.
137Surprisingly, the "fl" is preceded and followed by a space,
138and "NLG" is preceded by one and followed by two spaces.
c13182ef
MK
139This may be a bug in the locale files.
140The Italian, Australian, Swiss
fea681da
MK
141and Portuguese locales yield
142.RS
b9f02710 143
fea681da
MK
144[ L. **1235] [ ITL **1.235]
145.br
146[ $**1234.57] [ AUD **1,234.57]
147.br
148[Fr. **1234,57] [CHF **1.234,57]
149.br
150[ **1234$57Esc] [ **1.234$57PTE ]
151.RE
a7fadb55
MK
152.SH "CONFORMING TO"
153Not in POSIX.1-2001.
ef0b8171 154Present on several other systems.
fea681da
MK
155.SH "SEE ALSO"
156.BR setlocale (3),
157.BR sprintf (3),
158.BR locale (7)