Gim*_*411 0 currency number-formatting swift
我有一个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
}
Run Code Online (Sandbox Code Playgroud)
但对于负值,它会像这样显示:
- $ - 0.50
如何正确格式化,或从Double中删除" - "?
您应该尽可能地利用API提供的可用格式化程序,例如, NumberFormatter
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.string(from: 50.0) // "$50.00"
formatter.string(from: -50.0) // "-$50.00"
Run Code Online (Sandbox Code Playgroud)
这样可以更轻松地支持不同的本地化,而无需任何其他代码
所以,如果要添加formatter.locale = Locale.init(identifier: "en_UK"),输出将变为......
"£50.00"
"-£50.00"
Run Code Online (Sandbox Code Playgroud)
显然,在大多数情况下我会使用Locale.current,但情况会发生变化
当然,但我希望正输出也显示"+"符号
它不像我想的那么漂亮,但......
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.positivePrefix = formatter.plusSign + formatter.currencySymbol
formatter.string(from: 50.0)
formatter.string(from: -50.0)
Run Code Online (Sandbox Code Playgroud)
输出
"+$50.00"
"-$50.00"
Run Code Online (Sandbox Code Playgroud)
例如,如果重新加载视图,并且在准备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
}()
Run Code Online (Sandbox Code Playgroud)
和/或static"configuration"struct/class 的(可能是lazy)属性
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |