作者:上床后悔_155 | 来源:互联网 | 2022-12-07 11:52
我有一个Double,可以是正面或负面的,我想用以下方式显示:
对于正值:
+ $ 1.10
对于负值:
- $ 0.50
空白为0值
我试过这样的:
Double surcharge = ...
if(surcharge <0){
cell.lblSurcharge.text = "-$" + String(format:"%.02f", surcharge)
}else if(surcharge > 0){
cell.lblSurcharge.text = "+$" + String(format:"%.02f", surcharge)
}else{
cell.lblSurcharge.text = nil
}
但对于负值,它会像这样显示:
- $ - 0.50
如何正确格式化,或从Double中删除" - "?
1> MadProgramme..:
您应该尽可能地利用API提供的可用格式化程序,例如, NumberFormatter
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.string(from: 50.0) // "$50.00"
formatter.string(from: -50.0) // "-$50.00"
这样可以更轻松地支持不同的本地化,而无需任何其他代码
所以,如果要添加formatter.locale = Locale.init(identifier: "en_UK")
,输出将变为......
"£50.00"
"-£50.00"
显然,在大多数情况下我会使用Locale.current
,但情况会发生变化
当然,但我希望正输出也显示"+"符号
它不像我想的那么漂亮,但......
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.positivePrefix = formatter.plusSign + formatter.currencySymbol
formatter.string(from: 50.0)
formatter.string(from: -50.0)
输出
"+$50.00"
"-$50.00"
例如,如果重新加载视图,并且在准备String之前我没有将numberStyle重置为.currency
让它懒惰的财产
var currencyFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.positivePrefix = formatter.plusSign + formatter.currencySymbol
formatter.string(from: 50.0)
formatter.string(from: -50.0
return formatter
}()
和/或static
"configuration"struct/class 的(可能是lazy)属性