您可以以NumberFormatter 开头,例如...
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.minimumIntegerDigits = 1
formatter.maximumIntegerDigits = 1
formatter.maximumFractionDigits = 3
var values = [1.623,1.614,1.591,1.577,1.600,1.579,1.622]
values.reverse()
let percentages = [0] + zip(values, values.dropFirst()).map {
(old, new) in
return (100.0 * (new - old) / old)
}
print(percentages.compactMap { formatter.string(from: NSNumber(value: $0 / 100.0)) })
它会打印出类似...的东西
["0%", "-2.651%", "1.33%", "-1.438%", "0.888%", "1.446%", "0.558%"]
您的字符串仅显示负数的信号。这不是OP所要求的。
? 上天禁止 OP 实际上必须做“一些”工作??
print(percentages.map { ($0 >= 0 ? "+" : "") + formatter.string(for: $0 / 100.0)! })
或者,最好……
formatter.positivePrefix = "+"
//....
print(percentages.compactMap { formatter.string(for: $0 / 100.0) })
打印...
["+0%", "-2.651%", "+1.33%", "-1.438%", "+0.888%", "+1.446%", "+0.558%"]
如果可能的话,您能否进一步解释一下如何伪造数字?
值的格式似乎与您生成的值不匹配,例如,0.8877615726062151 将是 0.8%,而不是 0.009%,因此您需要进行轻微的自定义,最好通过“稍微捏造”这些值。
所以,再次,从...开始
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.minimumIntegerDigits = 1
formatter.maximumIntegerDigits = 1
formatter.maximumFractionDigits = 3
formatter.minimumFractionDigits = 3
formatter.positivePrefix = "+"
我修改了
print(percentages.compactMap { formatter.string(for: $0 / 100.0) })
到
print(percentages.compactMap { formatter.string(for: $0 / 10000.0) })
现在打印
["+0.000%", "-0.027%", "+0.013%", "-0.014%", "+0.009%", "+0.014%", "+0.006%"]
根据我的观察,这似乎是您的目标 - 您只需免费获得本地化