我从网络服务中获取值,该服务以字符串格式返回价格,将其放入字典中,因此我获取的价格为“1.5000”,例如,这显然是 1.50 的货币。然而,在我的一生中,我无法让任何东西在 Swift 中工作来正确格式化它。在大多数其他语言中,您可以在几秒钟内完成此操作,因此我对如此简单的事情感到有点沮丧。
这是我的测试代码:
var testnumber = "1.5000"
let n = NSNumberFormatter()
n.numberStyle = NSNumberFormatterStyle.DecimalStyle
n.maximumFractionDigits = 2
n.minimumFractionDigits = 2
let returnNumber = n.numberFromString(testnumber)
println("Returned number is \(returnNumber)")
这在调试中打印出“number isOptional(1.5)”而不是 1.50!
我已将 NSNumberFormatterStyle.DecimalStyle 更改为 NSNumberFormatterStyle.CurrencyStyle,因为我认为这可能对我有用,因为返回的数字无论如何都是货币,但这让我回到调试“返回的数字为零” - 这让我更困惑!
我尝试过使用maximumIntegerDigits和minimumIntegerDigits,使用n.locale = NSLocale.currentLocale()设置语言环境,设置formatWidth,设置paddingPosition和paddingCharacter,但没有任何帮助,我要么回到nil回到1.5。
我最终需要做的就是将字符串转换为浮点数或货币值,并确保有 2 位小数,我不敢相信这是这么难完成的!
任何帮助将非常感激。
您正在打印一个数字而不是字符串
Xcode 11.4 • Swift 5.2 或更高版本
extension Formatter {
static let usCurrency: NumberFormatter = {
let formatter = NumberFormatter()
formatter.locale = .init(identifier: "en_US")
formatter.numberStyle = .currency
return formatter
}()
}
extension String {
var double: Double? { Double(self) }
var usCurrencyFormatted: String {
Formatter.usCurrency.string(for: double) ?? Formatter.usCurrency.string(for: 0) ?? ""
}
}
"1.1222".usCurrencyFormatted // "$1.12"
"2".usCurrencyFormatted // "$2.00"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)