Symptom
The IsNumber function is returning true for a value that uses a comma as the decimal separator when the regional setting is set to use a period as the decimal separator. It should return false.
Environment
-
PowerBuilder
-
Windows 7 Server
-
Windows 2008 Server.
Reproducing the Issue
1. Verify the Windows Control Panel regional settings for the decimal separator is a period:
2. Test isNumber function with a value using a period "." as the decimal and another number with a comma "," as a decimal.
Code behind the isNumber button:
//The isNumber() returns a boolean. //With the regional setting decimal setting as a period. The //value tested should return true if the decimal separator is a period // and false if the decimal separator is a comma. string ls_decimal, ls_comma ls_decimal = sle_1.text ls_comma = sle_2.text sle_3.text = string(IsNumber(ls_decimal)) sle_4.text = string(IsNumber(ls_comma))
Cause
This is a product defect that occurs on the Windows 7 and Windows 2008 Server operating systems.
Solution
The following workaround is provided:
long ll_len,ll_flag int i string ls_nbr ll_flag = 0 ls_nbr = "34.39" // Use IsNumber() to still test for alpha characters if isnumber(ls_nbr) then // move string to char array myarray = ls_nbr // get the length of the char array or number ll_len = upperbound(myarray) // find the comma for i = 1 to ll_len if (myarray[i] = ',') then // set a flag indicating comma instead of decimal ll_flag = 1 messagebox("Invalid Number","ls_nbr is not valid--found a comma instead of a decimal") return end if next else messagebox("Invalid Number","ls_nbr is not a number-contains alpha characters") end if