为什么这是一个无效的数字?

时间:2017-02-06 14:41:56

标签: swift swift3

显示数字的方式有很多种,例如:

16.666.67

这些都是针对不同地区和/或国家/地区的有效数字。 在我们的用例中,我们必须使用以下表示:

16.666.67

由于

  1. 使用数千个分隔符
  2. 更容易看出数字有多大
  3. 我们需要防止错误的用户输入,因此我们将使用句号
  4. 替换所有逗号

    但是,对于带有句点十进制编码器self.numberFormatter = NumberFormatter() self.numberFormatter.numberStyle = .decimal; self.numberFormatter.minimumFractionDigits = 0; self.numberFormatter.maximumFractionDigits = 2; self.numberFormatter.decimalSeparator = "."; print(self.numberFormatter.number(from: "16.666.67"); 的数字格式符号不是有效数字:

    nil

    导致 let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .decimal; numberFormatter.minimumFractionDigits = 0; numberFormatter.maximumFractionDigits = 2; numberFormatter.groupingSeparator = "."; numberFormatter.decimalSeparator = "."; print(numberFormatter.number(from: "16666")); print(numberFormatter.number(from: "16666,67")); print(numberFormatter.number(from: "16666.67")); print(numberFormatter.number(from: "16.666")); print(numberFormatter.number(from: "16.666,67")); print(numberFormatter.number(from: "16.666.67")); 。为什么这是一个无效的数字?我该如何解决这个问题?'

    修改

    以下测试:

    Optional(16666)
    nil
    Optional(16666.67)
    Optional(16666)
    nil
    nil
    

    输出是:

    onload="alert('done!')";
    function () {
      alert("trigger.Event("keydown", {keyCode: 13});");
    }

1 个答案:

答案 0 :(得分:2)

问题是字符串 16.667.67 This.is.a.number.00 一样无效。

您需要使String变量有效。

编辑:

根据评论,这听起来像是语言行为问题(Java与Swift)。

我正在看到关于处理这个问题的其他意见,但对我来说,看起来它可以归结为Swift NumberFormatter如何自动处理具有多个小数点的String输入。与(某些)其他语言不同,您可能需要在调用NumberFormatter之前对字符串进行一些预格式化