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
In Python, we can use float() to convert String to float. and we can use int() to convert String to an integer.
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.
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).
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]
Use parse(Float64,"1")
.
See more at: parse specification
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With