VAL: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
A740g (talk | contribs)
Add info on optional numericalType
 
(5 intermediate revisions by one other user not shown)
Line 3: Line 3:


{{PageSyntax}}
{{PageSyntax}}
: {{Parameter|numericValue}} = [[VAL]]({{Parameter|stringValue$}})
: {{Parameter|numericValue}} = [[VAL]]({{Parameter|stringValue$}}[, {{Parameter|numericalType}}])




{{PageParameters}}
{{PageParameters}}
* {{Parameter|stringValue$}} is a [[STRING]] containing a sequence of digit characters which shall be converted into a numeric value.
* {{Parameter|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]]
** 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 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.
** 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.
* {{Parameter|numericalType}} is optional and specifies the target type for the conversion. Accepted types are:
** [[SINGLE]]
** [[DOUBLE]]
** [[_FLOAT]]
** [[_BYTE]]
** [[INTEGER]]
** [[LONG]]
** [[_INTEGER64]]
** [[_OFFSET]]
* The [[_UNSIGNED]] modifier is also allowed and can be combined with the integer types.




{{PageDescription}}
{{PageDescription}}
* 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)''.
* The regular (decimal) conversion stops at non-numeric characters except for spaces and the letters '''E''', '''D''' and '''F''' for specifying an exponent. But note, the string cannot be an exponent only, i.e. if the first non-space and non-sign string character is not a digit, then '''VAL''' returns ''zero(0)''. Same happens if it is a sign or spaces only.
* For binary, hexadecimal or octal strings conversion stops at digits or letters which are invalid in the respective number base system.
* 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.
* Note that this function cannot be used to return the [[ASCII]] value of a string character, use the [[ASC (function)]] for that purpose.
Line 30: Line 40:
</gallery>
</gallery>
<!-- additional availability notes go below here -->
<!-- additional availability notes go below here -->
* In '''QB64-PE v4.2.0''' support for {{Parameter|numericalType}} was added.




{{PageExamples}}
{{PageExamples}}
''Example 1:'' Differences in values returned with QBasic and QB64:
;Example 1: Differences in values returned with QBasic and QB64(PE).
{{CodeStart}}
{{CodeStart}}
{{Cl|PRINT}} {{Cl|VAL}}("{{Cl|&H}}") '203 in QB, 0 in QB64
{{Cl|PRINT}} {{Cl|VAL}}({{Text|<nowiki>"&amp;H"</nowiki>|#FFB100}}) {{Text|<nowiki>'203 in QB, 0 in QB64</nowiki>|#919191}}
{{Cl|PRINT}} {{Cl|VAL}}("{{Cl|&H}}FFFF") ' -1 QB, 65535 in QB64
{{Cl|PRINT}} {{Cl|VAL}}({{Text|<nowiki>"&amp;HFFFF"</nowiki>|#FFB100}}) {{Text|<nowiki>' -1 QB, 65535 in QB64</nowiki>|#919191}}
{{Cl|PRINT}} {{Cl|VAL}}("{{Cl|&H}}FFFF&") '65535 in both
{{Cl|PRINT}} {{Cl|VAL}}({{Text|<nowiki>"&amp;HFFFF&amp;"</nowiki>|#FFB100}}) {{Text|<nowiki>'65535 in both</nowiki>|#919191}}
{{CodeEnd}}
{{CodeEnd}}
:''Explanation:'' A quirk in QBasic returned VAL values of 203 for "&" and "&H" that was never fixed until PDS(7.1).
{{PreStart}}
'''Explanation'''
A quirk in QBasic returned '''VAL''' values of 203 for '''&''' and [[&H]] that was
never fixed until PDS(7.1).
{{PreEnd}}


----


''Example 2:'' Converting a string with some number characters
;Example 2: Converting a string with some number characters in it.
{{CodeStart}}
{{CodeStart}}
text$ = "1.23Hello"
text$ = {{Text|<nowiki>"1.23Hello"</nowiki>|#FFB100}}
number! = VAL(text$)
number! = {{Cl|VAL}}(text$)
PRINT number!
{{Cl|PRINT}} number!
{{CodeEnd}}
{{CodeEnd}}
{{OutputStart}}
{{OutputStart}}
Line 52: Line 68:
{{OutputEnd}}
{{OutputEnd}}


----


''Example 3:'' Converting literal and variable [[STRING|string]] values to numerical values.
;Example 3: Converting a literal and a variable string to numerical values and add them.
{{CodeStart}}
{{CodeStart}}
a$ = "33"
a$ = {{Text|<nowiki>"33"</nowiki>|#FFB100}}
PRINT VAL("10") + VAL(a$) + 1
{{Cl|PRINT}} {{Cl|VAL}}({{Text|<nowiki>"10"</nowiki>|#FFB100}}) + {{Cl|VAL}}(a$) + {{Text|1|#F580B1}}
{{CodeEnd}}
{{CodeEnd}}
{{OutputStart}}
{{OutputStart}}
44
44
{{OutputEnd}}
{{OutputEnd}}
:''Explanation:'' 10 + 33 + 1 = 44, the strings were converted to values.
{{PreStart}}
'''Explanation'''
You have to convert the string to values in order to use them in a
mathematical expression. If '''VAL''' wasn't used here, then the program
would break with an error, as you can't add strings and numbers.
{{PreEnd}}


: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'''.
 
 
''Example 4:'' Converting a hexadecimal value to decimal value using HEX$ with VAL.
{{CodeStart}}
{{CodeStart}}
decnumber% = 96
decnumber% = {{Text|96|#F580B1}}
hexnumber$ = "&H" + {{Cl|HEX$}}(decnumber%) 'convert decimal value to hex and add hex prefix
hexnumber$ = {{Text|<nowiki>"&amp;H"</nowiki>|#FFB100}} + {{Cl|HEX$}}(decnumber%) {{Text|<nowiki>'convert decimal value to hex and add hex prefix</nowiki>|#919191}}
PRINT hexnumber$
{{Cl|PRINT}} hexnumber$
decimal% = {{Cl|VAL}}(hexnumber$)
decimal% = {{Cl|VAL}}(hexnumber$)
PRINT decimal%
{{Cl|PRINT}} decimal%
{{CodeEnd}}
{{CodeEnd}}
{{OutputStart}}
{{OutputStart}}
Line 80: Line 99:
  96
  96
{{OutputEnd}}
{{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!
{{PreStart}}
'''Explanation'''
[[HEX$]] converts a decimal number to hexadecimal, but [[VAL]] will only
recognize it as a valid value with the [[&H]] prefix.
{{PreEnd}}





Latest revision as of 21:52, 7 June 2025

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


Syntax

numericValue = VAL(stringValue$[, numericalType])


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.
  • numericalType is optional and specifies the target type for the conversion. Accepted types are:
  • The _UNSIGNED modifier is also allowed and can be combined with the integer types.


Description

  • The regular (decimal) conversion stops at non-numeric characters except for spaces and the letters E, D and F for specifying an exponent. But note, the string cannot be an exponent only, i.e. if the first non-space and non-sign string character is not a digit, then VAL returns zero(0). Same happens if it is a sign or spaces only.
  • 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

  • In QB64-PE v4.2.0 support for numericalType was added.


Examples

Example 1
Differences in values returned with QBasic and QB64(PE).
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 in it.
text$ = "1.23Hello"
number! = VAL(text$)
PRINT number!
1.23

Example 3
Converting a literal and a variable string to numerical values and add them.
a$ = "33"
PRINT VAL("10") + VAL(a$) + 1
44
Explanation
 You have to convert the string to values in order to use them in a
 mathematical expression. If VAL wasn't used here, then the program
 would break with an error, as you can't add strings and numbers.

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.


See also



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