VAL

From QB64 Phoenix Edition Wiki
Revision as of 17:59, 6 June 2025 by RhoSigma (talk | contribs)
Jump to navigation Jump to search

The VAL function returns the decimal numerical equivalent value of a STRING numerical value.


Syntax

numericValue = VAL(stringValue$)


Parameters

  • stringValue$ is a STRING containing a sequence of digit characters which shall be converted into a numeric value.
    • May also contain the letters E, D and F for an exponent value in the scientific notation
    • The number as well as a given exponent value may be prepended with a plus(+) or minus(-) sign and any spaces in between the characters are ignored.
    • The string may also start with &B, &H or &O to denote a binary, hexadecimal or octal number string respectively. However, only leading spaces (before the & character) are ignored here.


Description

  • The regular (decimal) conversion stops at non-numeric characters except for spaces and the letters E, D and F for specifying an exponent. That is, if the first non-space string character is not a digit, then VAL returns zero(0).
  • For binary, hexadecimal or octal strings conversion stops at digits or letters which are invalid in the respective number base system.
  • Note that this function cannot be used to return the ASCII value of a string character, use the ASC (function) for that purpose.


Availability


Examples

Example 1: Differences in values returned with QBasic and QB64:

PRINT VAL("&H") '203 in QB, 0 in QB64
PRINT VAL("&HFFFF") ' -1 QB, 65535 in QB64
PRINT VAL("&HFFFF&") '65535 in both
Explanation: A quirk in QBasic returned VAL values of 203 for "&" and "&H" that was never fixed until PDS(7.1).


Example 2: Converting a string with some number characters

 text$ = "1.23Hello"
 number! = VAL(text$)
 PRINT number!
1.23


Example 3: Converting literal and variable string values to numerical values.

 a$ = "33"
 PRINT VAL("10") + VAL(a$) + 1
44
Explanation: 10 + 33 + 1 = 44, the strings were converted to values.
You have to convert the string to values in order to use them in a mathematical expression also since mixing strings with numbers isn't allowed. VAL will stop at a text letter so VAL("123G56) would return 123.
If VAL wasn't used the program would break with an error, as you can't add the value 1 to a string, if the 1 was a string ("1") then the program would return "10331", but now since we used VAL, the numbers were added as they should.


Example 4: Converting a hexadecimal value to decimal value using HEX$ with VAL.

 decnumber% = 96
 hexnumber$ = "&H" + HEX$(decnumber%)  'convert decimal value to hex and add hex prefix
 PRINT hexnumber$
 decimal% = VAL(hexnumber$)
 PRINT decimal%
&H60
 96
Explanation: HEX$ converts a decimal number to hexadecimal, but VAL will only recognize it as a valid value with the "&H" prefix. Especially since hexadecimal numbers can use "A" through "F" in them. Create a converter function from this code!


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link