解析朱莉娅对理性的输入

Pig*_*gna 3 rational-number input type-conversion julia

我想读取用户输入并将其存储为Rational,无论类型如何:integer,float ot rational.例如:

5 --> store it as 5//1
2.3 --> store it as 23//10
4//7 --> store it as 4//7
Run Code Online (Sandbox Code Playgroud)

目前我写了以下内容:

a = convert(Rational,parse(Float64,readline(STDIN)))
Run Code Online (Sandbox Code Playgroud)

如果我输入一个整数,如5,那很好.

但如果我输入2.3,a商店2589569785738035//1125899906842624 .

如果我输入一个分数(无论是形式4/7还是形式4//7)我得到一个ArgumentError: invalid number format for Float64.

如何解决Float和Rational问题?

Gom*_*ero 6

一种方法是将原始输入解析Expr(符号),eval表达式,将其转换为a Float64并使用rationalize来简化生成的有理数:

julia> rationalize(convert(Float64, eval(parse("5"))))
5//1

julia> rationalize(convert(Float64, eval(parse("2.3"))))
23//10

julia> rationalize(convert(Float64, eval(parse("4/7"))))
4//7

julia> rationalize(convert(Float64, eval(parse("4//7"))))
4//7
Run Code Online (Sandbox Code Playgroud)

rationalize使用近似浮点数,您可以在参数中指定错误tol.

用Julia Version 0.4.3测试