Actually, it doesn't. If you include a decimal character then the value is stored as a string, not a double.
On the plus side KiXtart handles intergers in scripts in exactly the same way, so at least it is consistant on that point!
Here is a more comprehensive test script showing the differences:
Code:
Break ON
$internal1=1
$internal2=1.2
$internal3=1234567890
$internal4=1234567890.1
$internal5=12345678901
$internal6=12345678901.1
$internal7=00001
$internal8='00001'
If Not IsDeclared($external1)
Run @SCRIPTEXE+' '+@SCRIPTDIR+'\'+@SCRIPTNAME
+' $$external0'
+' $$external1=1'
+' $$external2=1.2'
+' $$external3=1234567890'
+' $$external4=1234567890.1'
+' $$external5=12345678901'
+' $$external6=12345678901.1'
+' $$external7=00001'
+' $$external8="00001"'
Exit 0
EndIf
'KiXtart version: '+@KIX+@CRLF
'Internal (type) value : External (type) value'+@CRLF
'0. ('+VarTypeName($internal0)+') '+$internal0+' : ('+VarTypeName($external0)+') '+$external0+@CRLF
'1. ('+VarTypeName($internal1)+') '+$internal1+' : ('+VarTypeName($external1)+') '+$external1+@CRLF
'2. ('+VarTypeName($internal2)+') '+$internal2+' : ('+VarTypeName($external2)+') '+$external2+@CRLF
'3. ('+VarTypeName($internal3)+') '+$internal3+' : ('+VarTypeName($external3)+') '+$external3+@CRLF
'4. ('+VarTypeName($internal4)+') '+$internal4+' : ('+VarTypeName($external4)+') '+$external4+@CRLF
'5. ('+VarTypeName($internal5)+') '+$internal5+' : ('+VarTypeName($external5)+') '+$external5+@CRLF
'6. ('+VarTypeName($internal6)+') '+$internal6+' : ('+VarTypeName($external6)+') '+$external6+@CRLF
'7. ('+VarTypeName($internal7)+') '+$internal7+' : ('+VarTypeName($external7)+') '+$external7+@CRLF
'8. ('+VarTypeName($internal8)+') '+$internal8+' : ('+VarTypeName($external8)+') '+$external8+@CRLF
Output is:
Code:
Internal (type) value : External (type) value
0. (Empty) : (Empty)
1. (Long) 1 : (Long) 1
2. (Double) 1.2 : (String) 1.2
3. (Long) 1234567890 : (Long) 1234567890
4. (Double) 1234567890.1 : (String) 1234567890.1
5. (Long) -539222987 : (Long) -539222987
6. (Double) 12345678901.1 : (String) 12345678901.1
7. (Long) 1 : (Long) 1
8. (String) 00001 : (Long) 1
As you can see, there are two major differences.
- Any number with a decimal character is treated as a string instead of a double when supplied as a command line parameter.
- Any string which comprises numeric characters (0-9) gets converted to a long even if it is surrounded by quotes. In the case of test 8 this drops leading zeroes from the string, which loses significant information.
I agree that if you surround a command line parameter with quotes, then you should reasonably expect it to be treated as a string rather than a number.