Some types are automatically converted to other types as needed. |
For example, an integer value can always be used where a double value is expected. In the following: |
a := 5 |
b :=a *.2 |
b is assigned the double value 1.0 and a’s type remains integer. |
Similarly, a double value can be converted to a dcomplex value. Automatic conversions are limited to converting between numeric types, and converting a reference type to the type it refers to. |
Other types require explicit conversion. For example, the following expression is illegal: |
5 * “1234foo” |
but the string can be explicitly converted to an integer using the function as_integer. The following yields an integer value of 6170: |
5 * as_integer(“1234foo”) |
The following functions are available for explicit type conversion: |
as_boolean |
as_byte |
as_short |
as_integer |
as_float |
as_double |
as_complex |
as_dcomplex |
as_string |
There are types that cannot be converted at all. |
For example, a function type cannot be converted to any other type. |
Type mismatches result in run-time errors. |
Type Conversion |
The following functions convert their argument to the stated type: |
as_boolean(x) |
as_byte(x) |
as_short(x) |
as_integer(x) |
as_float(x) |
as_double(x) |
as_complex(x) |
as_dcomplex(x) |
as_string(x) |
The argument x must be either numeric-or string-valued. |
See § 3.1.3, page , for a discussion of implicit type conversion (i.e., not requiring the use of one of these functions). |
Boolean Conversions |
Conversion of a numeric values to Boolean yield T if the converted value is non-zero. A string value yields T if its length is non-zero. |
For example: |
as_ boolean([3.14159, 0]) |
yields [T, F], and as_boolean(“how are you?”) |
yields [T, T, T], and as_boolean([”,’a’,”]) |
yields [F, T, F], and as_boolean(“.0000001”) |
yields T, and as_boolean(“.0000001foo”) |
and as_boolean(“0.”) |
and as_boolean(0+9i) |
yields T. |
Note that an empty string here means a string with no text in it; this is different from a string with no elements. |
as_boolean(”) |
yields F, but as_boolean(“”) |
yields [], an empty (boolean) vector. |
Integer Conversions |
A boolean value converted to byte, short, or integer yields 1 if the value was T and 0 if F. Conversions between byte, short, and integer types yields the same values as the host machine’s C++ compiler doing the same conversion via a cast. |
A float or double value yields the same integer value as the host machine’s C++ compiler doing the same conversion via a cast. In particular, it is possible for a value like -3.14159 to be converted to -3 or -4 depending upon the particular compiler. |
If the direction of this conversion is important, you can use floor and ceiling: |
ceiling(x) |
returns the smallest integer which is greater than or equal to the argument, x. This function can be abbreviated as ceil. If x is a vector, ceiling is applied to each of the elements of the vector. |
floor(x) |
returns the largest integer which is less than or equal to the argument, x. If x is a vector, floor is applied to each of the elements of the vector. |
These will reliably convert floating point numbers to integers. complex or dcomplex values behave like float or double values except that complex or dcomplex values also lose their imaginary portion. |
A string value is converted as per the C (and C++) routine atoi(). If the value is not a valid integer then it is converted to 0. |
Float and Double Conversions |
A boolean value converted to float or double yields 1.0 if T and 0.0 if F. |
complex or dcomplex values lose their imaginary portion when converted to float or double. |
A string value is converted as per the C (and C++) routine atof(). If the value is not a valid floating-point number then it is converted to 0.0. |
Complex Conversions |
A boolean value converted to complex or dcomplex yields 1.0+0.0i if T and 0.0+0.0i if F. |
float or double numbers converted to complex or dcomplex results in a complex number whose real portion is equal to the float or double value, and whose imaginary portion is 0.0. |
A string value is converted as per the C (and C++) routine atof(). |
String Conversions |
boolean values when converted to a string yields “T” if true and “F” if false. |
Byte, short, or integer values yield their natural string representation. |
float values are converted as per printf()’s “%.6g” format. |
double values are converted as per printf()’s “%.12g” format. |
complex values are converted as per printf()’s “%.6g+%.6gi” format. |
dcomplex values are converted as per printf()’s “%.12g+%.12gi” format. The conversion of floating point values to strings are changed by setting the system.print.precision value or the print.precision attribute for an individual value. |
Check Also
Insertion & Extraction In C++
Insertion is the operation of sending characters to a stream, expressed by the overloaded insertion …