从标准输入读取数字

从标准输入读取数字是读取字符串和解析诸如数字之类的字符串的组合。

parse 函数用于将字符串解析为所需的数字类型:

julia> parse(Int, "17")
17

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

parse(T, x) 预期的格式与 Julia 期望的数字文字格式类似,但不完全相同 :

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

结合 parsereadline 函数,我们可以从一行读取一个数字:

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

它按预期工作:

julia> asknumber()
Enter a number: 78.3
78.3

关于浮点精度的常见警告适用。请注意,parse 可以与 BigIntBigFloat 一起使用,以消除或最小化精度损失。

有时,从同一行读取多个数字很有用。通常,该行可以用空格分割:

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

可以使用如下:

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