简体   繁体   English

带有分组分隔符的字符串中的 Numberformatter 数字

[英]Numberformatter Number from String with grouping separator

I have a NumberFormatter which has a currency number style.我有一个具有货币编号样式的NumberFormatter I can successfully format my number to string.我可以成功地将我的号码格式化为字符串。 However, when I try to get number from string, It returns null.但是,当我尝试从字符串中获取数字时,它返回 null。 The problem occurs when string has grouping separator.当字符串具有分组分隔符时会出现问题。

My formatter:我的格式化程序:

let groupingSeparator = "."
let decimalSeparator = ","
let formatter = NumberFormatter()
formatter.maximumIntegerDigits = 6
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 0
formatter.numberStyle = .currency
formatter.groupingSize = 3
formatter.groupingSeparator = groupingSeparator
formatter.currencyGroupingSeparator = groupingSeparator
formatter.usesGroupingSeparator = true
formatter.decimalSeparator = decimalSeparator
formatter.currencyDecimalSeparator = decimalSeparator
formatter.currencySymbol = viewModel?.currency?.symbol ?? ""

How I try to get number from string:我如何尝试从字符串中获取数字:

if let number = amountFormatter.number(from: currentInput) {
        text = amountFormatter.string(from: number)
}

Working Texts:工作文本:

$1459
$2345,23

Not working Texts:不工作文本:

$1.459
$2.333,49

I suspect that your let constant groupingSeparator is empty.我怀疑你的 let 常量groupingSeparator是空的。 When I run the following code:当我运行以下代码时:

let groupingSeparator = "."

let formatter = NumberFormatter()
formatter.maximumIntegerDigits = 6
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 0
formatter.numberStyle = .currency
formatter.groupingSize = 3
formatter.groupingSeparator = groupingSeparator
formatter.currencyGroupingSeparator = groupingSeparator
formatter.usesGroupingSeparator = true
formatter.decimalSeparator = decimalSeparator
formatter.currencyDecimalSeparator = decimalSeparator



let strings = ["$1459",
               "$2345,23",
               "$1.459",
               "$2.333,49"
]

strings.forEach { value in
    let string = formatter.number(from: value)?.description ?? "nil"
    print("Value for \"\(value)\" = \(string)")
}

I get the output我得到 output

Value for "$1459" = 1459
Value for "$2345,23" = 2345.23
Value for "$1.459" = 1459
Value for "$2.333,49" = 2333.49

Exactly as expected.完全符合预期。

(Note that I'm in the US, so the default output for NSNumber.description uses a "." decimal separator.) (请注意,我在美国,因此NSNumber.description的默认 output 使用“.”小数分隔符。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM