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

How do I parse a String to a Float?

我需要消耗一个 json 来源,它将 floats 表示为 strings*,但我不知道该怎么做。

几乎容易:

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)

以防对其他人有所帮助 ;)