好一会儿后,我无法找到适合我问题的答案。
我有一些字符串,其中包含产品pricez的数字。例如1000、500或50。我希望将它们转换为2个小数:10.00、5.00和0.50
我如何才能做到这一点,而且也可以不将它们转换为int或float以保留字符串的情况?
答案 0 :(得分:2)
您可以先尝试将价格转换为整数,然后再除以100 –这样就得到了十进制/浮点值。然后使用NSNumberFormatter
转换回字符串更新
let formatter = NumberFormatter()
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
formatter.minimumIntegerDigits = 1
// formatter.decimalSeparator = "." <- optional step
let double1 = Double(0.5)
let double2 = Double(100.00)
let double3 = Double(50.00555)
print(formatter.string(for: double1))
print(formatter.string(for: double2))
print(formatter.string(for: double3))
// prints
Optional("0.50")
Optional("100.00")
Optional("50.01")
答案 1 :(得分:0)
要将其设置为所需的格式,您需要将数字字符串转换为浮点数,然后除以100,然后再次返回字符串。
下面是我根据您的想法改编而成的扩展程序。
var numberString = "20"
extension String {
var decimalString: String? {
guard let float = Float(self) else { return nil }
let fraction = float / 100
return String(format: "%.2f", fraction)
}
}
// You could unwrap the option either this way...
if let decimalString = numberString.decimalString {
print(decimalString)
}
// or this way...
print(numberString.decimalString ?? "Invalid value")
答案 2 :(得分:-1)
您将必须使用NumberFormatter并将值除以100
这是一个简单的String扩展名,如果不能将字符串转换为Double,它将返回字符串值:
extension String {
var convertToPrice: String? {
guard let value = Double(self) else { return self }
let divided = value / 100
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.currencySymbol = ""
currencyFormatter.decimalSeparator = "."
if let priceString = currencyFormatter.string(for: divided) {
return priceString
}
return self
}
}
用法:
"50".convertToPrice // "0.50"
答案 3 :(得分:-2)
发现这可以更轻松:
func formatPrice(price: String) -> String{
let pr = Double(price)!/100
return String(format: "%.2f",pr)
}
usage: formatPrice("1000") //returning 10.00