In order to successfully convert from a string representation of a decimal value to an actual real type on X++, you can't have any formats on your string. That means that the string has to be representing a double exactly as the real variable does: no thousand separator, and the dot ('.') character for the decimal separator.
It does not consider AX's region when performing the conversion.
Consider the following job:
static void Job1(Args _args)
{
str val1, val2, val3, val4;
real real1, real2, real3, real4;
val1 = '100,000.000';
val2 = '100.000,000';
val3 = '100000,005';
val4 = '100000.056405';
real1 = str2num(val1);
real2 = str2num(val2);
real3 = str2num(val3);
real4 = str2num(val4);
pause;
}
The only valid conversion is the last one, from the variable val4. The real variables have the following values after the assignment:
So just remember to be very careful when converting from a string representing a decimal value to a real X++ type when using the str2num function.
You can always use the .NET Framework instead. If you do, then you'll be able to set a specific culture when converting the double value, like the following valid X++ code:
System.Globalization.CultureInfo cultureInfo = System.Globalization.CultureInfo::CreateSpecificCulture("pt-Br");
real parsedDouble = System.Double::Parse("1.200,99", cultureInfo);
print parsedDouble;

No comments:
Post a Comment