# Octave's `str2num`

function

October 10, 2009 at 8:12 AM by Dr. Drang

In the Octave script for computing the binomial distribution that I posted a few days ago, I used the `str2num`

function to covert command-line arguments, which the `argv`

function returns as strings, into numbers. It turns out that `str2num`

can do more than that.

Here’s a brief Octave session demonstrating `str2num`

’s power:

```
octave-3.2.3:1> str2num('5')
ans = 5
octave-3.2.3:2> str2num('5.33')
ans = 5.3300
octave-3.2.3:3> str2num('5+7')
ans = 12
octave-3.2.3:4> str2num('(5+7)/5')
ans = 2.4000
octave-3.2.3:5> str2num('sin(pi/4)')
ans = 0.70711
octave-3.2.3:6> str2num('fred')
ans = [](0x0)
octave-3.2.3:7> str2num('[1, 2].^2')
ans =
1 4
```

Rather than just converting a string to a number, `str2num`

evaluates the string as an Octave expression and then returns the result as a number. More generally, if the result is an array of numbers, it will return that array. Only if the result cannot be interpreted as a number will `str2num`

fail, and even in that case it won’t issue an error message; Perl-like, it will just return an empty array.

This makes my binomial script even easier to use. Recall that to demonstrate it, I ran

```
binomial 10 .166667
```

to get the distribution of ones for 10 rolls of a standard six-sided die. I could have used the simpler

```
binomial 10 1/6
```

and taken advantage of the power of `str2num`

to get the same result

```
0 0.161506
1 0.323011
2 0.290710
3 0.155045
4 0.054266
5 0.013024
6 0.002171
7 0.000248
8 0.000019
9 0.000001
10 0.000000
```

Strangely, the Octave documentation for `str2num`

doesn’t mention that it does an expression evaluation, but the documentation for a similar function, `str2double`

says:

`str2double`

can replace`str2num`

, but avoids the use of eval on unknown data.

which is a pretty good hint that `str2num`

does an evaluation, but it would be nice if the docs did more than hint.