# Difference between revisions of "VAL"

m (Text replacement - "Qbasic" to "QBasic") |
m (Add Page Sections/Fix example highlighting/linking) |
||

Line 1: | Line 1: | ||

− | The | + | The [[VAL]] Function returns the decimal numerical equivalent value of a [[STRING]] numerical value. |

{{PageSyntax}} | {{PageSyntax}} | ||

− | :: value = VAL(string_value$) | + | :: value = [[VAL]](string_value$) |

+ | {{PageDescription}} | ||

* VAL converts string numbers to numerical values including decimal point values and prefixed "[[&H]]" hexadecimal, "[[&O]]" octal. | * 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. | * VAL conversion stops at non-numeric characters except for letter "D" or "E" exponential notation values. | ||

Line 17: | Line 18: | ||

+ | {{PageExamples}} | ||

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

{{CodeStart}} '' '' | {{CodeStart}} '' '' | ||

Line 29: | Line 31: | ||

{{CodeStart}} '' '' | {{CodeStart}} '' '' | ||

text$ = "1.23Hello" | text$ = "1.23Hello" | ||

− | number! = VAL(text$) | + | number! = {{Cl|VAL}}(text$) |

− | PRINT number! '' '' | + | {{Cl|PRINT}} number! '' '' |

{{CodeEnd}} | {{CodeEnd}} | ||

{{OutputStart}} | {{OutputStart}} | ||

Line 40: | Line 42: | ||

{{CodeStart}} '' '' | {{CodeStart}} '' '' | ||

a$ = "33" | a$ = "33" | ||

− | PRINT VAL("10") + VAL(a$) + 1 '' '' | + | {{Cl|PRINT}} {{Cl|VAL}}("10") + {{Cl|VAL}}(a$) + 1 '' '' |

{{CodeEnd}} | {{CodeEnd}} | ||

{{OutputStart}} | {{OutputStart}} | ||

Line 56: | Line 58: | ||

decnumber% = 96 | decnumber% = 96 | ||

hexnumber$ = "&H" + {{Cl|HEX$}}(decnumber%) 'convert decimal value to hex and add hex prefix | hexnumber$ = "&H" + {{Cl|HEX$}}(decnumber%) 'convert decimal value to hex and add hex prefix | ||

− | PRINT hexnumber$ | + | {{Cl|PRINT}} hexnumber$ |

decimal% = {{Cl|VAL}}(hexnumber$) | decimal% = {{Cl|VAL}}(hexnumber$) | ||

− | PRINT decimal% '' '' | + | {{Cl|PRINT}} decimal% '' '' |

{{CodeEnd}} | {{CodeEnd}} | ||

{{OutputStart}} | {{OutputStart}} | ||

Line 67: | Line 69: | ||

− | + | {{PageSeeAlso}} | |

* [[STR$]], [[HEX$]] | * [[STR$]], [[HEX$]] | ||

* [[OCT$]], [[ASC]] | * [[OCT$]], [[ASC]] |

## Latest revision as of 16:38, 28 February 2021

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

## Syntax

- value = VAL(string_value$)

## Description

- 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:
**VAL("9D4") = 90000**

- 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 strings:
**value% = VAL("&HFFFF") = -1**

## 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:*