2017-12-27 1385 views
2

我从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) 
    } 
} 

有没有办法到+符号添加到字符串时的百分比为正?

回答

0

您可以简单地用一个三元运算符的字符串格式更改为"+%.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%

+0

非常感谢大卫,这似乎是我正在寻找的。我怎样才能将从API中提取的值传递给'let percentChange'?当我尝试'let percentChange = bitcoinInfo.percentChange24h'时,我得到'Binary operator'>''不能应用于'String'和'Int''类型的操作数 – Wizzardzz

+0

@Wizzardzz检查我更新的答案,因为您没有包含类型在你的问题中'bitcoinInfo.percentChange24h',我不知道它是'String',但是我已经更新了我的答案,包括从'String'到'Double'的转换。你只需在guard语句中用'bitClengeInfo.percentChange24h'代替'percentChangeString'。 –

7

这是什么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) // ٠٫٩٨ ٪؜+ 
+0

伟大的解决方案罗布谢谢! – Wizzardzz

+1

或'formatter.string(for:value)'没有强制转换为NSNumber。 –

+0

我知道我需要学习更难的文档;我不相信它不在那里。固定。 –