Julia Language Input Reading Numbers from Standard Input


Example

Reading numbers from standard input is a combination of reading strings and parsing such strings as numbers.

The parse function is used to parse a string into the desired number type:

julia> parse(Int, "17")
17

julia> parse(Float32, "-3e6")
-3.0f6

The format expected by parse(T, x) is similar to, but not exactly the same, as the format Julia expects from number literals:

julia> -00000023
-23

julia> parse(Int, "-00000023")
-23

julia> 0x23 |> Int
35

julia> parse(Int, "0x23")
35

julia> 1_000_000
1000000

julia> parse(Int, "1_000_000")
ERROR: ArgumentError: invalid base 10 digit '_' in "1_000_000"
 in tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at ./parse.jl:88
 in parse(::Type{Int64}, ::String) at ./parse.jl:152

Combining the parse and readline functions allows us to read a single number from a line:

function asknumber()
    print("Enter a number: ")
    parse(Float64, readline())
end

which works as expected:

julia> asknumber()
Enter a number: 78.3
78.3

The usual caveats about floating-point precision apply. Note that parse can be used with BigInt and BigFloat to remove or minimize loss of precision.

Sometimes, it is useful to read more than one number from the same line. Typically, the line can be split with whitespace:

function askints()
    print("Enter some integers, separated by spaces: ")
    [parse(Int, x) for x in split(readline())]
end

which can be used as follows:

julia> askints()
Enter some integers, separated by spaces: 1 2 3 4
4-element Array{Int64,1}:
 1
 2
 3
 4