在正百分比变化前面添加 + 号
Posted
技术标签:
【中文标题】在正百分比变化前面添加 + 号【英文标题】:Add + sign in front of positive % change 【发布时间】:2018-06-08 09:45:38 【问题描述】:我正在从 API 获取数据以显示在我的 ios 应用程序中。其中一些数据是百分比,因此当它为负数时,例如显示为 -0.98%,没问题,但为了清楚起见,我希望正数变化显示为 +0.98 而不仅仅是 0.98。
这是我更新标签时的代码:
func updateBitcoinUI(with bitcoinInfo: Bitcoin)
DispatchQueue.main.async
self.bitcoinPercentageChangeLabel.text = String(format: "%.2f%%", Double(bitcoinInfo.percentChange24h) ?? 0)
当百分比为正时,有没有办法在字符串中添加+符号?
【问题讨论】:
【参考方案1】:这就是 NumberFormatter
的设计目的。使用这个而不是硬编码格式将正确处理使用其他百分比和分隔符格式的语言环境中的本地化。例如:
var formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.positivePrefix = formatter.plusSign
formatter.maximumFractionDigits = 2
let value = 0.0098
formatter.string(for: value) // +0.98%
formatter.locale = Locale(identifier: "ar") // Arabic
formatter.string(for: value) // ٠٫٩٨ ٪+
【讨论】:
或formatter.string(for: value)
不强制转换为 NSNumber。
我知道我需要更加努力地学习文档;我不敢相信它不在里面。固定。
哦……对……没有按照文档直到 Formatter
超类。再次感谢。【参考方案2】:
当值为正时,您可以简单地使用三元运算符将字符串格式更改为"+%.2f%%"
。
let percentChangeString = "0.98"
guard let percentChange = Double(percentChangeString) else return
let percentString = percentChange > 0 ? String(format: "+%.2f%%", percentChange) : String(format: "%.2f%%", percentChange)
输出:
+0.98%
对于 -0.98 的输入,输出为
-0.98%
【讨论】:
非常感谢大卫,这似乎就是我要找的。如何将从 API 获取的值传递给let percentChange
?当我尝试let percentChange = bitcoinInfo.percentChange24h
时,我得到Binary operator '>' cannot be applied to operands of type 'String' and 'Int'
@Wizzardzz 检查我更新的答案,因为您的问题中没有包含bitcoinInfo.percentChange24h
的类型,我不知道它是String
,但我已经更新了我的答案包括从String
到Double
的转换。您只需将 bitcoinInfo.percentChange24h
替换为警卫声明中的 percentChangeString
。【参考方案3】:
试试这个字符串格式表达式“%+.2f%%”
还有:http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html
【讨论】:
这比三元运算符方法要好,尽管它还没有本地化。例如。在德国或法国,他们希望看到“+0,98 %”,而不是“+0.98%”,例如NumberFormatter
提供的。以上是关于在正百分比变化前面添加 + 号的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用pct_change计算数据列的百分比变化环比变化率:计算当前元素和前一个元素之间的百分比变化使用style函数指定format的格式:百分比缺失值替换用颜色标注极大值和极小值
pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)