In various cases, the type of the original value may not be the same all time, or you want to apply different formatting instructions
depending on the values contained. The approach is easy: In the 2nd function parameter, provide a 2-level nested set which contains 1 or
more formatting instructions for the different types and values.
Example: str( 123.45, { { numeral, "#,##0.00", en_US }, { string, "XXXXXXXXX", align right } } );
The first set of parameters is used if the value provided is a numeral. Otherwise, if it is a string, then the 2nd set of parameers will be used.
A simple formatting approach will used if a type is encountered but not described, e.g. a boolean type in the example shown above.
The formatting conditions depend on the type of data provided, and optionally on the value.
Formatting Condition | Description |
---|---|
string | Data type is a string |
blank string | Data type is a string and the contents are blank |
void | Data type is a void. (Note: Format voids as strings) |
numeral | Data type is a numeral |
positive | Data type is a numeral, value is greater than 0 |
negative | Data type is a negative value is smaller than 0 |
zero | Data type is a numeral, value equals to 0 |
near zero | Data type is a numeral, value equals or is very close to 0 (ruled by epsilon value) |
date | Data type is a date |
blank date | Data type is a date, containing a blank date |
date time | Data type is a date, containing both date and time |
time | Data type is a date, containing a time only |
boolean | Data type is a boolean |
set | Data type is a set+ |
In case you have different formats for positive (or negative) numbers and the rest, then desribe the formatting for the positive (or negative) numbers first because the checking is done from left to right.
for all ( { 5678.91, 0, true, "Abc" }, v[] )
{
echo( str( v[], {
{ positive, "#,##0.0", de_ch },
{ string, "x x x x", '', '-' },
{ numeral, "0 'zero or negative'" },
{ boolean, "'Boolean: ' TT" } } ) );
}
5'678.9
0 zero or negative
Boolean: TRUE
a b c -