我有一个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中删除“-”?
答案 0 :(得分:7)
您应尽可能利用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
(可能是惰性)属性
答案 1 :(得分:1)
简单的答案可能是使用类类型公开的“ abs”功能。
cell.lblSurcharge.text = "-$" + String(format:"%.02f", abs(surcharge))
答案 2 :(得分:1)
您知道surcharge
在那时是负数,因此只需添加-
使其对格式为正数即可。另外,您可以将"-$"
移至格式字符串中:
更改:
cell.lblSurcharge.text = "-$" + String(format:"%.02f", surcharge)
收件人:
cell.lblSurcharge.text = String(format:"-$%.02f", -surcharge)
要一次性完成所有操作,请使用三进制运算符(?:
)处理零并将符号添加到格式字符串:
cell.lblSurcharge.text = surcharge == 0 ? "" : String(format:"%@$%.02f", surcharge > 0 ? "+" : "-", abs(surcharge))