Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Julia: Convert numeric string to float or int

I am trying to write numeric data pulled from a database into a Float64[]. The original data is in ::ASCIIString format, so trying to push it to the array gives the following error:

julia> push!(a, "1") ERROR: MethodError: `convert` has no method matching convert(::Type{Float64}, ::ASCIIString) This may have arisen from a call to the constructor Float64(...), since type constructors fall back to convert methods. Closest candidates are:   call{T}(::Type{T}, ::Any)   convert(::Type{Float64}, ::Int8)   convert(::Type{Float64}, ::Int16)   ...  in push! at array.jl:432 

Attempting to convert the data directly unsurprisingly throws the same error:

julia> convert(Float64, "1") ERROR: MethodError: `convert` has no method matching convert(::Type{Float64}, ::ASCIIString) This may have arisen from a call to the constructor Float64(...), since type constructors fall back to convert methods. Closest candidates are:   call{T}(::Type{T}, ::Any)   convert(::Type{Float64}, ::Int8)   convert(::Type{Float64}, ::Int16)   ... 

Given that I know the data is numeric, is there a way I can convert it before pushing?

p.s. I am using version 0.4.0

like image 736
peter-b Avatar asked Oct 30 '15 16:10

peter-b


People also ask

Can you convert string to int or float?

In Python, we can use float() to convert String to float. and we can use int() to convert String to an integer.

Can you convert strings to floats?

We can convert a string to float in Python using the float() function. This is a built-in function used to convert an object to a floating point number. Internally, the float() function calls specified object __float__() function.

How do you parse an int in Julia?

The string input and required base are taken from the user using the readline() method of Julia. The parse() method converts the base into Integer(Int64). Next, the parse() method is used to convert the String into Integer datatype with the given base(here hexadecimal).


2 Answers

You can parse(Float64,"1") from a string. Or in the case of a vector

map(x->parse(Float64,x),stringvec) 

will parse the whole vector.

BTW consider using tryparse(Float64,x) instead of parse. It returns a Nullable{Float64} which is null in the case string doesn't parse well. For example:

isnull(tryparse(Float64,"33.2.1")) == true 

And usually one would want a default value in case of a parse error:

strvec = ["1.2","NA","-1e3"] map(x->(v = tryparse(Float64,x); isnull(v) ? 0.0 : get(v)),strvec) # gives [1.2,0.0,-1000.0] 
like image 97
Dan Getz Avatar answered Sep 23 '22 18:09

Dan Getz


Use parse(Float64,"1").

See more at: parse specification

like image 40
Maciek Leks Avatar answered Sep 23 '22 18:09

Maciek Leks