2.3.2.2.3 $( ) Substitution - Numeric to String Conversionnumeric-string-conversion
SyntaxSyntax
The $() notation is used for numeric to string conversion. This notation evaluates the given expression at run-time, converts the result to a numeric string, and then substitutes the string for itself.
The notation has the following form:
$(expression [, format])
where the format is optional or can be Origin format, C-language format, or combined Origin and C-Language format as described in the following sections.
Expression can be one of the following:
Expression
|
Format
|
Example
|
Description
|
number
|
NA
|
type $(4.567); //ANS: 4.567
|
Display the number with up to 14 significant digits
|
numeric variable
|
.3
|
xx=1.2345678;
type $(xx, .3); //ANS: 1.235
|
Display the variable xx with 3 decimal places
|
numeric object property
|
NA
|
//if a 2-column workbook is active
type "there are $(wks.ncols) columns";
//ANS: there are 2 columns
|
Display wks.ncols value
|
dataset variable
|
NA
|
dataset ds1={2,4,6}; //dataset variable
type $(ds1); //ANS: 2 4 6
|
Display ds1 with space separated list
|
range variable
|
*3
|
//fill column A with 0.00012345, 6.789, 20.2
range ra=col(A); //range variable
type $(ra, *3); //ANS: 1.23E-4 6.79, 20.2
|
Display ra with 3 significant digits
|
math expression
|
.0,
|
xx = 1234.5678;
type $(xx*4, .0,); //ANS: 4,938
|
Display expression result with 0 decimal places and comma separator
|
Format
We use type command to show effect of all formats.
Default Format
The square brackets indicate that format is an optional argument for the $() substitution notation. No no format is specified, Origin will carry expression to the number of decimal digits or significant digits specified by the @SD system variable (which default value is 14). For example:
double aa = 3.14159265358979323846;
type $(aa); // ANS: 3.1415926535898
Origin Formats
Origin supports custom formatting of numeric values in the worksheet or in text labels. For a full list of numeric format options, see Reference Tables: Origin Formats.
Format
|
Description
|
Example
|
*n
|
Display n significant digits
|
xx=1.23456;
type "xx = $(xx, *2)"; //ANS: xx=1.2
|
.n
|
Display n decimal places
|
xx=1.23456;
type "xx = $(xx, .2)"; //ANS: xx=1.23
|
*n*
|
Display n significant digits, truncating trailing zeros
|
xx = 1.10001;
type "xx = $(xx, *4*)"; //ANS: xx=1.1
|
.n,
|
Display n decimal places, using comma separator (US, UK, etc.)
|
xx = 1234.5678;
type "xx = $(xx, .2,)"; //ANS: xx=1,234.57
xx= 10000;
type "$(xx, .0,)"; //ANS: 10,000
|
E.n
|
Display n decimal places, in engineering format
|
xx=203465987;
type "xx = $(xx, E*3)"; //ANS: xx=203M
|
S*n
|
Display n significant digits in scientific notation of the form 1E3
|
xx=203465987;
type "xx = $(xx, S*3)"; //ANS: xx=2.03E+08
|
D<format>
|
Display in custom date format, where <format> is either the index number (counting from 0) of the format, starting from the top of the Column Properties Display list; or a string built using these date and time format specifiers.
|
type "$(date(7/20/2009), D1)"; // ANS: Monday, July 20, 2009
type "$(date(7/20/2009), Dyyyy'-'MM'-'dd)"; //ANS: 2009-07-20
DT=2459858.6946202; //assign a julian date to DT
type "DT = $(DT, D1)"; // ANS: DT = Thursday, October 6, 2022
type "Now= $(@D, DMM-dd-yyyy h:mm:ss tt)"; // @D: current date&time
|
T<format>
|
Display in custom time format, where <format> is either the index number (counting from 0) of the format, starting from the top of the Column Properties Display list; or a string built using these time format specifiers.
|
type "$(time(14:31:04), T4)"; //ANS: 02 PM
type "$(time(14:31:04), Thh'.'mm'.'ss)"; //ANS: 02.31.04
DT=2459858.6946202;
type "DT = $(DT, T0)"; // ANS: DT = 16:40
type "Now = $(@D, THH:mm:ss.##)"; // @D: current date&time
|
C<format>
|
Display month or day of week in Calendar format. <format> is either M# (month), or D#=day of the week. # can be 0 (3 characters), 1 (full characters) or 2 (1 character)
|
type "$(12, CM0)"; // ANS: Dec
type "$(3, CD1)"; // ANS: Wednesday
|
#n or ##
|
Display an integer to n places, zero padding where necessary. Or use n number of #'s to refer to nth places
|
xx=45;
type "xx=$(xx, #5)"; //ANS: 00045
type "xx=$(xx, ###)"; //AnS: 045
|
<prefix>##<sep>###<suffix>
|
Display a number by specifying a separator (<sep>) between digits and optionally add prefix(<prefix>) and/or suffix (<suffix>). One # symbol indicates one digit. The last # in this expression always refers to the unit digit. The numbers of # in both first and second parts can be varied.
|
xx=56000;
type "xx=$(xx, ##+###)"; //ANS: xx=56+000
xx=4000;
type "xx=$(xx, ##+##M)"; //ANS: xx=40+00M
|
# #/n
|
Round and display a number as a fraction with specified n as denominator. The numerator and denominator are separated by a forward slash /. The number of digits of numerator is adjusted accordingly.
|
AA = 0.334;
type "AA = $(AA, # ##/##)"; //ANS: AA = 1/3
type "AA = $(AA, # #/8)"; //ANS: AA = 3/8
|
D[<space>]M[S][F][n]
|
Display a degree number in the format of Degree° Minute' Second", where 1 degree = 60 minutes, and 1 minute = 60 seconds. Space can be inserted to separate each part. n indicates decimal places for fractions. F displays degree number without symbols and inserting spaces as separator.
|
DD = 37.34255;
type "DD = $(DD, DMS)"; //ANS: DD = 37°20'33"
type "DD = $(DD, D MS)"; //ANS: DD = 37° 20' 33"
type "DD = $(DD, DMSF)"; //ANS: DD = 37 20 33
type "DD = $(DD, DMF1)"; //ANS: DD = 37 20.6
|
C-Language Formats
The format portion of the $() notation also supports C-language formatting statements.
Option
|
Un/Signed
|
Output
|
Input Range
|
Example
|
d, i
|
SIGNED
|
Integer values (of decimal or integer value)
|
-2^31 -- 2^31 -1
|
double nn = -247.56;
type "Value: $(nn,%d)"; // ANS: -247
|
f, e, E, g, G
|
SIGNED
|
Decimal, scientific, decimal-or-scientific
|
+/-1e290 -- +/-1e-290
|
double nn = 1.23456e5;
type "Values: $(nn, %9.4f), $(nn, %9.4E), $(nn, %g)";
// ANS: 123456.0000, 1.2346E+005, 123456
double nn = 1.23456e6;
type "Values: $(nn, %9.4f), $(nn, %9.4E), $(nn, %g)";
// ANS: 123456.0000, 1.2346E+006, 1.23456e+006
|
o, u, x, X
|
UNSIGNED
|
Octal, Integer, hexadecimal, HEXADECIMAL
|
-2^31 -- 2^32 - 1
|
double nn = 65551;
type "Values: $(nn, %o), $(nn, %u), $(nn, %X)";
// ANS: 200017, 65551, 1000F
|
Note: In the last category, negative values will be expressed as two's complement.
Combining Origin and C-language Formats
Origin supports the use of formats E and S along with C-language format specifiers. For example:
xx = 1e6;
type "xx = $(xx, E%4.2f)"; // ANS: 1.00M
Display Negative Values
Most of Origin's LabTalk command statements take options and options are always preceded by the dash "-" character.
Therefore the following command will not work
k=-5;
type $(k); //intepret as type -5 and think -5 is an option of ''type'' command
Therefore you must protect the - by enclosing the substitution in quotes or parentheses. For example:
K = -5;
type "$(K)"; // This works
type ($(K)); // This works
Variable Naming with $()
In assignment statements, the $() notation is substitution-processed and resolved to a value regardless of which side of the assignment operator it is located.
//create variable A with value 2
A = 2; //Define variable A with value 2.
//Create a variable A2 with the value 3
A$(A) = 3; $(A) is resolved first so LHS is A2
//verify the result
A2=;
A$(A)=;
Also when variable names are used for range or dataset type argument in functions, $() substitution is needed to resolve it first.
//fill column 1 to 5 with values
col(1)=data(1,100);
int nn = 5;
loop(ii,2,nn)
{
wcol(ii)=normal(100);
}
//Example of using variable in X Function smooth
loop(ii,2,nn)
{
//smooth on the iith column $(ii)
smooth $(ii) method:=aav npts:=10;
}
//Example of using variable in LabTalk function sum()
lastcolumn=wks.ncols;
//add a column after last one and set the value to be sum of last column
col($(lastcolumn+1))= sum($(lastcolumn));
col($(lastcolumn+1))[L]$= sum; //set long name of column
---
For more examples of $() substitution, see Numeric to String conversion.
|