NSNumberFormatter 将 0.5 更改为 .50

NSNumberFormatter changes 0.5 to .50

我的压力来自 Eureka (https://github.com/xmartlabs/Eureka) 和 NSFormatter 的使用。

我的应用程序在第一次尝试时将 0,75 更改为 0,将 1,75 更改为 1.00

在此之后,我尝试了多种方法,例如

let formatter = NumberFormatter()
formatter.groupingSeparator = "."
formatter.minimumFractionDigits = 2
formatter.alwaysShowsDecimalSeparator = true

formatter.numberStyle = .decimal

我不知道我怎么知道:

"Okay, now 1,75 equals 1.75and 0,75 equals 0.75"

我与尤里卡的小数行:

        timeField = DecimalRow(){ row in
           row.title = "Duration"
           row.placeholder = "1.25"
           row.value = timesheet.time
        }

提前致谢!

可能的问题是您没有在格式化程序上设置语言环境,也没有设置小数点分隔符。我假设小数点分隔符也将是 .

因此 0,75 被解析为 0 因为 , 字符未知。

以下应该可以解决您的问题:

formatter.decimalSeparator = ","

方法:

  • 不要对格式分隔符进行硬编码。
  • 设置语言环境或获取当前语言环境并进行设置。

代码:

let formatter = NumberFormatter()
formatter.minimumFractionDigits = 2
formatter.minimumIntegerDigits = 1
formatter.locale = Locale.current //or formatter.locale = Locale(identifier: "en_GR")

let n1 = NSNumber(value: 0.75)
formatter.string(from: n1)

正在获取所有区域设置标识符:

Locale.availableIdentifiers

感谢这位好心人,他删除了他的评论。

他是对的,解决方案是 formatter.decimalSeparator = "," 而不是分组分隔符,非常感谢!

此外,为此,您需要使用 row.useFormatterOnDidBeginEditing = true,有了这个,,不要变成 . !

谢谢大家!