2017-12-27 1176 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

我知道我需要學習更難的文檔;我不相信它不在那裏。固定。 –