The '''VAL''' Function returns the decimal numerical equivalent value of a [[STRING]] numerical value. {{PageSyntax}} :: value = VAL(string_value$) * VAL converts string numbers to numerical values including decimal point values and prefixed "[[&H]]" hexadecimal, "[[&O]]" octal. * VAL conversion stops at non-numeric characters except for letter "D" or "E" exponential notation values. :String values with "D" and "E" letters between numbers may be converted also! EX: '''{{text|VAL("9D4") <nowiki>=</nowiki> 90000|green}}''' * If the first string character is not a number VAL returns 0. VAL may return erratic values with "%" or "&" starting characters. * Hexadecimal [[HEX$]] string values with the "[[&H]]" prefix can be converted to a decimal value with digits 0 to 9 and letters A to F, like; dec = VAL("&H"+hexvar$). * Octal [[OCT$]] string values with the "[[&O]]" prefix can be converted to a decimal value with digits from 0 to 7 only. * Presently VAL '''cannot''' convert QB64 binary [[&B]] prefixed strings from binary to decimal in '''QB64'''. * For character values of [[ASCII]] data use [[ASC]] to get the value. * In QB64 use an [[INTEGER]] return variable to hold integer values returned by VAL [[HEX$|Hex]] strings: '''{{text|value% <nowiki>= VAL("&HFFFF") =</nowiki> -1|green}}''' ''Example 1:'' Differences in values returned with Qbasic and QB64: {{CodeStart}} '' '' {{Cl|PRINT}} {{Cl|VAL}}("{{Cl|&H}}") '203 in QB, 0 in QB64 {{Cl|PRINT}} {{Cl|VAL}}("{{Cl|&H}}FFFF") ' -1 QB, 65535 in QB64 {{Cl|PRINT}} {{Cl|VAL}}("{{Cl|&H}}FFFF&") '65535 in both '' '' {{CodeEnd}} :''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 {{CodeStart}} '' '' text$ = "1.23Hello" number! = VAL(text$) PRINT number! '' '' {{CodeEnd}} {{OutputStart}} 1.23 {{OutputEnd}} ''Example 3:'' Converting literal and variable [[STRING|string]] values to numerical values. {{CodeStart}} '' '' a$ = "33" PRINT VAL("10") + VAL(a$) + 1 '' '' {{CodeEnd}} {{OutputStart}} 44 {{OutputEnd}} :''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. {{CodeStart}} decnumber% = 96 hexnumber$ = "&H" + {{Cl|HEX$}}(decnumber%) 'convert decimal value to hex and add hex prefix PRINT hexnumber$ decimal% = {{Cl|VAL}}(hexnumber$) PRINT decimal% '' '' {{CodeEnd}} {{OutputStart}} &H60 96 {{OutputEnd}} : ''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:'' * [[STR$]], [[HEX$]] * [[OCT$]], [[ASC]] {{PageNavigation}} <