fmt$ |
Format characters that will determine how the numeric
expression should be formatted. This expression is termed the mask.
There may be up to 18 digit-formatting digits on either side of the decimal
point. The mask may not contain literal characters unless each character
is preceded with a backslash (\) escape character, or the literal characters
are enclosed in quotes.
fmt$ may contain
one, two or three formatting masks, separated by semicolon (;) characters:
One mask |
If fmt$ contains
just one format mask, the mask is used to format all possible values of
num_expression. For example: |
|
x$ = FORMAT$(z!, "000.00") |
Two masks |
If fmt$ contains
two format masks, the first mask is used for positive values (=> 0),
and the second mask is used for negative values (< 0). For example: |
|
x$ = FORMAT$(-100, "+00000.00;-000") |
Three masks |
If fmt$ contains
three masks, the first mask is used for positive values (> 0), the
second mask for negative values (< 0), and the third mask is used if
num_expression is zero (0). For example: |
|
FOR y! = -0.5! TO 0.5!
STEP 0.5!
x$ = FORMAT$(y!,
"+.0;-.0; .0")
NEXT y! |
Digit placeholders in a mask do not have to be contiguous.
This allows you to format a single number into multiple displayed parts.
For example:
A$ = FORMAT$(123456, "00\:00\:00")
' 12:34:56
The following table shows the characters you can
use to create the user-defined format strings (masks) and the definition
of each formatting character:
Character |
Definition |
Empty string |
[null string] No
formatting takes place. The number is converted to Extended-precision
and formatted similarly to STR$, but without the leading space that STR$
applies to non-negative numbers.
A$=FORMAT$(0.2)
' .200000002980232
A$=FORMAT$(0.2!, "")
' .200000002980232
A$=FORMAT$(0.2#)
' .2
A$=FORMAT$(0.2#, "")
' .2 |
0 |
[zero]
Digit placeholder. PowerBASIC will insert a digit or 0 in that position.
If there is a digit in
num_expression in the position where the 0 appears in the format
string, return that digit. Otherwise, return "0".
If the number being formatted has fewer digits than there are zeros (on
either side of the decimal point) in the format expression, leading or
trailing zeros are added. If the number has more digits to the right
of the decimal point than there are zeros to the right of the decimal
point in the format expression, the number is rounded to as many decimal
places as there are zeros in the mask.
If the number has more
digits to the left of the decimal point than there are zeros to the left
of the decimal point in the format expression, the extra digits are displayed
without truncation. If the numeric value is negative, the negation
symbol will be treated as a decimal digit. Therefore, care should
be exercised when displaying negative values with this placeholder style.
In such cases, it is recommended that multiple masks be used.
' Numeric padded with
leading zero characters
A$ = FORMAT$(999%, "00000000")
' 00000999 |
# |
[Number symbol]
Digit placeholder. If there is a digit for this position, PowerBASIC
replaces this placeholder with a digit, nothing, or a user-specified character. |
|
Unlike the 0 digit placeholder,
if the numeric value has the fewer digits than there are # characters
on either side of the decimal placeholder, PowerBASIC will either:
a)
Omit this character position from the final formatted string; or
Substitute a user-specified
replacement character if one has been defined (see the asterisk (*) character
for more information). To specify leading spaces, prefix the mask with
"* " (asterisk and a space character).
For example:
' No leading spaces and
trailing spaces
A$ = FORMAT$(0.75!, "####.###")
' 0.75
' Up to 3 Leading spaces
before decimal
A$ = FORMAT$(0.75!, "*
##.###") ' 0.75
' Using asterisks for
padding characters
A$ = FORMAT$(0.75!, "*=##.###")
' ===0.75=
FORMAT$ may also return
a string that is larger than the number of characters in the mask:
A$ = FORMAT$(999999.9,
"#.#") ' 999999.9 |
. |
[period]
Decimal placeholder. Determines the position of the decimal
point in the resultant formatted string.
If any numeric field is
specified to the left of the decimal point, at least one digit will always
result, even if only a zero. The zero is not considered to be a
"leading" zero if it is the only digit to the left of the decimal.
Placing more than one period character in the fmt$ string will
produce undefined results. |
% |
[percent] Percentage
placeholder. PowerBASIC multiplies num_expression by 100,
and adds a trailing percent symbol. For example:
x$ = FORMAT$(1 / 5!, "0.0%")
' 20.0% |
, |
[comma] Thousand
separator. Used to separate thousands from hundreds within a number
that has four or more digits to the left of the decimal point. In
order to be recognized as a format character, the comma must be placed
immediately after a digit placeholder character (also see Restrictions
below).
A$ = FORMAT$(1234567@,
"#,") ' 1,234,567
A$ = FORMAT$(12345@, "#,.00")
' 12,345.00
A$ = FORMAT$(12345@, "#.00,")
' 12,345.00
A$ = FORMAT$(1212.46,
"$00,000.00") ' $01,212.46
A$ = FORMAT$(1000%, """#""#,")
' #1,000
A$ = FORMAT$(1234567@,
"0,") ' 1,234,567 |
*x |
[asterisk] Digit
placeholder and fill-character. Instructs PowerBASIC to insert a
digit or character "x" in that position. If there
is a digit in num_expression at the position where the * appears
in the format string, that digit is used; otherwise, the "x"
character is used (where "x" represents your own choice
of character). The *x specifier acts as two digit (#) fields.
A$ = FORMAT$(9999.9@,"$**####,.00")'
$**9,999.90
A$ = FORMAT$(0@,"$*=###0,.00#")
' $=====0.00=
A$ = FORMAT$(0@,"$*
####0,.00") ' $ 0.00 |
E- e- E+
e+ |
[e] Scientific format.
PowerBASIC will use scientific notation in the formatted output.
Use E- or e- to place a minus sign in front of negative exponents.
Use E+ or e+ to place a minus sign in front of negative exponents and
a plus sign in front of non-negative exponents.
In order to be recognized
as a format sequence, the E-, e-, E+, or e+ must be placed between two
digit placeholder characters. For example:
A$ = FORMAT$( 99.999,
"0.0E-##") ' 1.0E2
A$ = FORMAT$(-99.999,
"0.0E-##") ' -1.0E2
A$ = FORMAT$( 99.999,
"0.0E+##") ' 1.0E+2
A$ = FORMAT$(-99.999,
"0.0E+##") ' -1.0E+2
A$ = FORMAT$(0.1!, "0.0e+##")
' 1.0e-1 |
" |
[double-quote] Quoted
string. PowerBASIC treats all characters up to the next quotation
mark as-is, without interpreting them as digit placeholders or format
characters. Also see backslash. For example:
A$ = FORMAT$(12, $DQ+"##"+$DQ+"##")
' ##12
A$ = FORMAT$(5.55, """XYZ=""#.##\#")
' XYZ=5.55#
A$ = FORMAT$(25, """x=""#")
' x=25
A$ = FORMAT$(999, """Total
""#") ' Total 999
A$ = FORMAT$(5, $DQ+"x="+$DQ+"#")
' x=5 |
\x |
[backslash] Escaped
character prefix. PowerBASIC treats the character "x"
immediately following the backslash (\) as a literal character rather
than a digit placeholder or a formatting character. Many characters
in a mask have a special meaning and cannot be used as literal characters
unless they are preceded by a backslash.
The backslash itself is
not copied. To display a backslash, use two backslashes (\\).
To display a literal double-quote, use two double-quote characters.
To simplify the mask string
for common numeric formats, FORMAT$ permits the dollar symbol, the left
and right parenthesis symbols, the plus and minus symbols, and the space
character ("$()+- ") to pass through from the mask string into
the formatted output string, without requiring an escape (\) prefix character.
A$ = FORMAT$(23, "(*
0\%)") ' ( 23%)
A$ = FORMAT$(99999, "#\#")
' 99999#
A$ = FORMAT$(5, "\"+$DQ+$DQ+"x="+$DQ+
_
"#\"+$DQ)
' "x=5"
A$ = FORMAT$(5, "\""""x=""#\""")
' "x=5"
A$ = FORMAT$(1000%, """#####,""")
' "#####," |
|
Restrictions |
You cannot pass a string
expression or string variable in num_expression. Do not
place more than one decimal point in the mask.
FORMAT$ can return the maximum possible number of
digits (up to 4932 for Extended-precision);
however, the resulting digits will be meaningless beyond the actual precision
of num_expression. Consequently, the value of num_expression
may produce formatted strings that are wider than the length of fmt$,
for example:
A$ = FORMAT$(3e30!, "#,###") ' returns 41
characters
Rounding, if necessary, is implemented by the "banker's
rounding" principle: if the fractional digit being rounded off is
exactly five, with no trailing digits, the number is rounded to the nearest
even number. This provides better results, on average, and follows
the IEEE standard. For example:
A$ = FORMAT$(0.5##, "0")
' 0
A$ = FORMAT$(1.5##, "0")
' 2
A$ = FORMAT$(2.5##, "0")
' 2
A$ = FORMAT$(2.51##, "0")
' 3
Semicolon characters, being mask delimiters, should
not be used for other purposes in mask strings unless prefixed with an
escaped character symbol (\).
FORMAT$, when used with some formatting characters
such as the thousands separator (comma), may not produce a "right-justified"
formatted string. The simple solution is to apply separate justification
with the RSET statement or the RSET$ function. For example:
A$ = SPACE$(12)
RSET A$ = FORMAT$(1,"#,###.00")
' 1.00
RSET A$ = FORMAT$(1000, "#,.00")
' 1,000.00
RSET A$ = FORMAT$(1000000,"#,###.00")' 1,000,000.00
B$ = RSET$(FORMAT$(1e6, "#,"),10)
' " 1,000,000"
One further enhancement would be to combine this
into a MACRO function, for example:
MACRO mMoney1(d,l) = "$"+RSET$(FORMAT$(d,"#,"),l-1)
MACRO mMoney2(d,l) = RSET$(FORMAT$(d,"$#,"),l)
...
A$ = mMoney1(1000,10)
' "$ 1,000"
B$ = mMoney2(1000,10)
' " $1,000" |