gpt4 book ai didi

swift - Format Double 为负货币,或从 Double 中删除 "-"符号

转载 作者:行者123 更新时间:2023-11-28 09:32:54 25 4
gpt4 key购买 nike

我有一个 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) // "$50.00"
formatter.string(from: -50.0) // "-$50.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)

输出

"+$50.00"
"-$50.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
}()

和/或“配置”结构/类的static(可能是惰性的)属性

关于swift - Format Double 为负货币,或从 Double 中删除 "-"符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51923138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com