Stack Overflow Asked by methodical on December 16, 2021
This is a fairly simple question but has been causing me a multitude of issues. I have a integer which comes from my API endpoint in a string format, as this: "-43.47" (for example). I need to display the number differently (as they’re percentages of change) in my SwiftUI view. The code I have been trying to use for this is below;
if((Int(self.percentageChange) ?? 0) >= 0) {
Text("+ " + String(self.percentageChange + "%")).foregroundColor(Color.green)
} else {
Text("- " + String((0 - Int(self.percentageChange)) + "%")).foregroundColor(Color.red)
}
The problem is, whether or not the string number is a negative integer, it gets parsed as a positive integer and appears as so in my actual view (without an actual photo, but take my word for it): "+ -43.47%", and I have no idea why. Obviously -43.47 is less than 0, so it should be caught by the exception, but for some strange reason, perhaps as a result of my application of parenthesis or otherwise, it isn’t being caught as such.
Use NumberFormatter
:
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .percent
numberFormatter.multiplier = 1
numberFormatter.maximumFractionDigits = 2
numberFormatter.positivePrefix = "+"
---
let percentageChange = Double(self.percentageChange) ?? 0
let color = percentageChange < 0 ? Color.red : Color.green
Text(numberFormatter.string(for: percentageChange)).foregroundColor(color)
Note that this will make your number formatted correctly and properly localized.
Answered by Sulthan on December 16, 2021
Isn't it easier to check the string for the leading minus sign
if self.percentageChange.hasPrefix("-") {
Text(self.percentageChange + "%").foregroundColor(Color.red)
} else {
Text("+ " + self.percentageChange + "%").foregroundColor(Color.green)
}
Answered by vadian on December 16, 2021
You just need to use the Float
initializer to convert floating-point string to float and then compare.
Replace:
if((Int(self.percentageChange) ?? 0) >= 0) {
With:
if((Float(percentageChange) ?? 0) >= 0) {
The better alternative is to do this:
if !self.percentageChange.hasPrefix("-") {
Answered by Frankenstein on December 16, 2021
1 Asked on November 26, 2020 by dwipal-shrirao
1 Asked on November 26, 2020 by mer-can
0 Asked on November 26, 2020 by donghwan-shin
1 Asked on November 25, 2020 by bubinga
1 Asked on November 24, 2020
1 Asked on November 24, 2020
0 Asked on November 24, 2020 by fury
1 Asked on November 22, 2020 by insberr
2 Asked on November 22, 2020 by rharris
2 Asked on November 22, 2020 by joe-carter
3 Asked on November 21, 2020 by ruchira-gayan-ranaweera
2 Asked on November 21, 2020 by ryan-pergent
1 Asked on November 19, 2020 by habib-ismail
Get help from others!
Recent Questions
Recent Answers
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP