0

我试图float numberamount字符串中获取currency symbol“100.00”。它在英语中正常工作。当设备中的语言更改为德语时,其行为正在发生变化。如何在不受设备语言更改影响的情况下实现浮点值。

func getFloatNumberFromString(_ str: String) -> Float {
        guard let number = NumberFormatter().number(from: str) else {
            return 0.0
        }

        return number.floatValue
    }

下面的另一段代码来处理它:

    func removeFormatAmount() -> Double {
            let formatter = NumberFormatter()
            formatter.numberStyle = .decimal
            return formatter.number(from: self) as! Double? ?? 0
   }

当我使用第二种方法时,输出为 0。

请让我知道我错过了什么或建议我处理它。提前致谢

4

2 回答 2

1

在许多欧洲国家,小数点分隔符是逗号而不是点。

您可以将Locale格式化程序的 设置为固定值。

func float(from str: String) -> Float {
    let formatter = NumberFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    guard let number = formatter.number(from: str) else {
        return 0.0
    }

    return number.floatValue
}

PS:我更改了签名以适应 Swift 3+ 样式

于 2017-12-07T09:18:24.790 回答
1

你试过直接投吗?像这样。

let floatString = "12.34"
let number = Double(floatString) ?? 0.0
于 2017-12-07T09:07:22.707 回答