为负货币格式化 Double,或从 Double 中删除“-”符号
Format Double for negative currency, or remove "-" sign from Double
我有一个 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 中删除“-”?
您应该尽可能使用 API 提供的可用格式化程序,例如 NumberFormatter
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.string(from: 50.0) // ".00"
formatter.string(from: -50.0) // "-.00"
这使得无需任何额外代码即可更轻松地支持不同的本地化
所以,如果添加 formatter.locale = Locale.init(identifier: "en_UK")
,输出将变为...
"£50.00"
"-£50.00"
显然,在大多数情况下我会使用 Locale.current
,但情况会发生变化
Sure, but I want the positive output to show the "+" sign too
它没有我想要的那么漂亮,但是...
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.positivePrefix = formatter.plusSign + formatter.currencySymbol
formatter.string(from: 50.0)
formatter.string(from: -50.0)
产出
"+.00"
"-.00"
such as if the view is reloaded and I don't reset numberStyle to .currency before the String is prepared
让它变得懒惰 属性
var currencyFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.positivePrefix = formatter.plusSign + formatter.currencySymbol
return formatter
}()
And/or一个static
(可能是懒惰的)属性 of "configuration" struct/class
简单的答案可能是使用 class 类型公开的 "abs" 函数。
cell.lblSurcharge.text = "-$" + String(format:"%.02f", abs(surcharge))
你知道 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))
我有一个 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 中删除“-”?
您应该尽可能使用 API 提供的可用格式化程序,例如 NumberFormatter
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.string(from: 50.0) // ".00"
formatter.string(from: -50.0) // "-.00"
这使得无需任何额外代码即可更轻松地支持不同的本地化
所以,如果添加 formatter.locale = Locale.init(identifier: "en_UK")
,输出将变为...
"£50.00"
"-£50.00"
显然,在大多数情况下我会使用 Locale.current
,但情况会发生变化
Sure, but I want the positive output to show the "+" sign too
它没有我想要的那么漂亮,但是...
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.positivePrefix = formatter.plusSign + formatter.currencySymbol
formatter.string(from: 50.0)
formatter.string(from: -50.0)
产出
"+.00"
"-.00"
such as if the view is reloaded and I don't reset numberStyle to .currency before the String is prepared
让它变得懒惰 属性
var currencyFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.positivePrefix = formatter.plusSign + formatter.currencySymbol
return formatter
}()
And/or一个static
(可能是懒惰的)属性 of "configuration" struct/class
简单的答案可能是使用 class 类型公开的 "abs" 函数。
cell.lblSurcharge.text = "-$" + String(format:"%.02f", abs(surcharge))
你知道 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))