Ios UITextField在Swift中具有货币值时如何使用numberFromString

Ios UITextField在Swift中具有货币值时如何使用numberFromString,ios,swift,xcode6,Ios,Swift,Xcode6,我有一个“金额”输入字段,它接受我希望在输入字段本身中显示为货币的数值。这似乎是我能够做到的没有问题 然后在计算中使用该值,并将其作为货币值输出。同样,这在第一次使用时效果良好,因为它最初将其视为一种双重货币,而不是货币 当我尝试重用“金额”输入字段中的值时,我的问题就出现了,因为可以看到该值,并且由于货币符号等原因,该值不再是双精度值 有什么建议吗 根据建议编辑如下: 使用这些修正,第一次在字段中输入任何内容时,计算就开始工作。如果在填充字段时尝试计算,则会将字段重置为$0.00 如果我修改为

我有一个“金额”输入字段,它接受我希望在输入字段本身中显示为货币的数值。这似乎是我能够做到的没有问题

然后在计算中使用该值,并将其作为货币值输出。同样,这在第一次使用时效果良好,因为它最初将其视为一种双重货币,而不是货币

当我尝试重用“金额”输入字段中的值时,我的问题就出现了,因为可以看到该值,并且由于货币符号等原因,该值不再是双精度值

有什么建议吗

根据建议编辑如下:

使用这些修正,第一次在字段中输入任何内容时,计算就开始工作。如果在填充字段时尝试计算,则会将字段重置为$0.00

如果我修改为:

    formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
一切正常,但金额输入字段不再显示为货币


我试图提供屏幕截图,但我没有足够的信誉点。

这是给你带来麻烦的线路吗

var enteredAmount = NSNumberFormatter().numberFromString(finalAmount.text)!.doubleValue
看来你的想法是对的。您可以使用数字格式化程序将值转换为用于显示的格式化字符串,或将格式化字符串转换为值

我希望该代码能够正常工作

那一行是不是给了你一个编译错误?运行时出错?不给它应有的价值

编辑: @莱昂纳多萨维奥达布斯指出了这个问题。该行应使用您在上面创建的数字格式化程序:

var enteredAmount = formatter.numberFromString(finalAmount.text)!.doubleValue
你真的不应该像那样使用强力展开。应使用nil合并运算符:

var enteredAmount = formatter.numberFromString(finalAmount.text)?.doubleValue ?? 0.0
编辑2: 在美国,此代码在操场上运行良好:

import Foundation

var formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2

let moneyString = "$12.93"

var enteredAmount = formatter.numberFromString(moneyString)?.doubleValue ?? 0.0

enteredAmount += 0.07

var newString = formatter.stringFromNumber(enteredAmount)
我去掉了所有的语言环境,使它更简单

编辑3: 你的区域设置代码对我来说没有意义

for identifier in ["en_US" , "en_UK" , "en_US","fr_FR"] {
    formatter.locale = NSLocale(localeIdentifier: identifier)
    formatter.minimumFractionDigits = 2
    formatter.maximumFractionDigits = 2
}//end of locale detection for currency and decimal formatting

这段代码看起来像是在3个不同的标识符值之间循环,并为格式化程序分配3个不同的区域设置,相同的最大/最小数字同时计算2。按照我阅读代码的方式,它将首先指定美国地区,然后是英国本地,然后是美国英语,最后是来自法国的法语。因此,在循环结束时,区域设置将设置为fr\u fr。这可能不是您想要的。

嗨,邓肯,是的,这是我经常遇到的问题。它最初加载,但在第二次尝试运行计算时会出现以下错误。致命错误:在展开可选值时意外发现nil您应该使用您定义的格式设置程序NSNumberFormatterStyle.CurrencyStyle,否则它将无法识别货币符号。我没有注意到他没有使用自定义格式化程序。关闭以编辑我的答案…我已尝试了上述操作,而当您尝试打开应用程序时,应用程序将编译错误。Swift的函数签名专门化。\u fatalErrorMessage Swift.StaticString,Swift.StaticString,Swift.StaticString,Swift.UInt->。closure 2Tanks Duncan我现在正在处理这个问题。您是对的,区域设置似乎只使用列表中的最后一种货币。我打算将其作为一个单独的问题发布,因为我似乎没有正确地实现它。尝试此操作会出现错误致命错误:在展开我尝试修改的可选值时意外发现nil?而不是然后我就可以进去了!我在计算中声明变量的任何地方。最终的结果仍然和它的错误一样。
for identifier in ["en_US" , "en_UK" , "en_US","fr_FR"] {
    formatter.locale = NSLocale(localeIdentifier: identifier)
    formatter.minimumFractionDigits = 2
    formatter.maximumFractionDigits = 2
}//end of locale detection for currency and decimal formatting