Elm:String.toFloat 不适用于逗号,只能用点 - 怎么办?

Elm: String.toFloat doesn't work with comma only with point - what to do?

我是 elm 的新手,我想做一个简单的里程计数器应用程序。

如果我在 OK 分支中得到 "1.2" (POINT) 表单输入 - String.toFloat returns,数字为 1.2。

但是如果我得到 "1,2"(逗号)形式的输入,那么 String.toFloat returns 在 Err 分支中 "You can't have words, only numbers!"

这很像一个实时验证器。

代码:

TypingInInput val ->
        case String.toFloat val of
            Ok success ->
                { model | inputValue = val, errorMessage = Nothing }

            Err err ->
                { model | inputValue = val, errorMessage = Just "You can't have words, or spaces, only numbers!" } 
   .

问题:那么我如何强制“1,2”的String.toFloat给我1.2数字

不幸的是,toFloat 的源代码被硬编码为仅 respect a dot as decimal separator。作为解决方法,您可以在将字符串传递给 toFloat 之前将字符串中的逗号替换为点。

String.Extra.replace 可用于简单的字符串替换。

String.toFloat的实现只支持点作为分隔符。

在解析 Float

之前,您应该先替换逗号

请看例子:

import Html exposing (text)
import String
import Regex


main =
  "1,2"
    |> Regex.replace Regex.All (Regex.regex ",") (\_ -> ".")
    |> String.toFloat
    |> toString
    |> text -- 1.2

In JavaScript parseFloat 也不支持逗号分隔符。