如何将字符串解析为浮点数?

时间:2018-09-28 10:04:55

标签: json floating-point elm

我需要使用一个将float s表示为string s *的json源,我不知道该怎么做。

这很容易:

Json.Decode.map String.toFloat Json.Decode.string

但是,这会产生一个Maybe Float,如果它无法解码该字符串,我希望它完全失败。

(*)的原因是实际数据类型为Decimal,因此“ 1.5”!=“ 1.50”。我的应用程序不必在意。

2 个答案:

答案 0 :(得分:4)

您可以安装elm-community/json-extra并使用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")

答案 1 :(得分:1)

另一个不需要 fromMaybe 的选项:

floatDecoder : Json.Decoder Float
floatDecoder =
    Json.string |> Json.andThen (String.toFloat >> Maybe.withDefault 0.0 >> Json.succeed)

以防万一它对其他人有帮助;)