如何将字符串解析为浮点数?
How do I parse a String to a Float?
我需要消耗一个 json 来源,它将 float
s 表示为 string
s*,但我不知道该怎么做。
几乎容易:
Json.Decode.map String.toFloat Json.Decode.string
但是,这会产生一个 Maybe Float
,如果它不能解码字符串,我宁愿它完全失败。
(*) 这样做的原因是真正的数据类型是十进制,所以 "1.5" != "1.50"。不过我的应用程序不必关心。
您可以安装 elm-community/json-extra
and use Json.Decode.Extra.parseFloat
或者只是复制它的实现
fromMaybe : String -> Maybe a -> Decode.Decoder a
fromMaybe error val =
case val of
Just v ->
Decode.succeed v
Nothing ->
Decode.fail error
parseFloat : Decode.Decoder Float
parseFloat =
Decode.string |> Decode.andThen (String.toFloat >> fromMaybe "failed to parse as float")
使 fromMaybe
不必要的另一个选项:
floatDecoder : Json.Decoder Float
floatDecoder =
Json.string |> Json.andThen (String.toFloat >> Maybe.withDefault 0.0 >> Json.succeed)
以防对其他人有所帮助 ;)
我需要消耗一个 json 来源,它将 float
s 表示为 string
s*,但我不知道该怎么做。
几乎容易:
Json.Decode.map String.toFloat Json.Decode.string
但是,这会产生一个 Maybe Float
,如果它不能解码字符串,我宁愿它完全失败。
(*) 这样做的原因是真正的数据类型是十进制,所以 "1.5" != "1.50"。不过我的应用程序不必关心。
您可以安装 elm-community/json-extra
and use Json.Decode.Extra.parseFloat
或者只是复制它的实现
fromMaybe : String -> Maybe a -> Decode.Decoder a
fromMaybe error val =
case val of
Just v ->
Decode.succeed v
Nothing ->
Decode.fail error
parseFloat : Decode.Decoder Float
parseFloat =
Decode.string |> Decode.andThen (String.toFloat >> fromMaybe "failed to parse as float")
使 fromMaybe
不必要的另一个选项:
floatDecoder : Json.Decoder Float
floatDecoder =
Json.string |> Json.andThen (String.toFloat >> Maybe.withDefault 0.0 >> Json.succeed)
以防对其他人有所帮助 ;)