我有一笔'金额'输入字段,它取一个数字值,我希望在输入字段本身中显示为货币。我似乎没有任何问题。
然后我在计算中使用此值并输出为货币值。再次,这在第一次工作正常,因为它最初将其视为双重而非货币。
当我尝试重复使用'金额中的值时,我的问题就出现了。输入字段,因为货币符号等,正在看到该值并且不再是双倍。
有什么建议吗?
根据建议编辑如下:
var formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
var numberOfPlaces = 2.0
var multiplier = pow(10, numberOfPlaces)
var enteredAmount = formatter.numberFromString(finalAmount.text)?.doubleValue ?? 0.0
enteredAmountLabel.text = formatter.stringFromNumber(enteredAmount)
finalAmount.text = formatter.stringFromNumber(enteredAmount)
使用这些修正计算在第一次输入任何字段时起作用。如果在填充字段时尝试计算,则会将字段重置为$ 0.00
如果我修改为:
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
一切都按预期工作,但金额输入字段不再显示为货币。
我正在尝试提供屏幕截图,但我没有足够的声誉点。
答案 0 :(得分:0)
这是给您带来麻烦的线吗?
var enteredAmount = NSNumberFormatter().numberFromString(finalAmount.text)!.doubleValue
看起来你有正确的想法。您可以使用数字格式器将值转换为格式化字符串以进行显示,或将格式化字符串转换为值。
我希望代码可以正常工作。
该行是否给出了编译错误?运行时出错?不给它应该的价值?
var enteredAmount = formatter.numberFromString(finalAmount.text)!.doubleValue
你真的不应该像这样使用力展开。您应该使用nil合并运算符:
var enteredAmount = formatter.numberFromString(finalAmount.text)?.doubleValue ?? 0.0
在美国,此代码在游乐场中完美运行:
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)
(我删除了所有的语言环境,使其变得更简单。)
您的区域设置代码对我没有意义。
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个identifier
的不同值,并为您的格式化程序分配3个不同的区域设置,并且相同的最大/最小数字计数(均为2)。我读取该代码的方式是,首先分配美国本地,然后是英国本地,再分配美国英语,最后是法国法语。因此,在循环结束时,语言环境将设置为“fr_FR”。这可能不是你想要的。