Ios 如何将Swift中的十进制设置为百分比

Ios 如何将Swift中的十进制设置为百分比,ios,swift,string,floating-point,double,Ios,Swift,String,Floating Point,Double,我有一个函数,可以找到数组中相邻值的百分比差 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) [0.

我有一个函数,可以找到数组中相邻值的百分比差

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)
[0.0,-2.651048088779294,1.3299556681444034,-1.437500000000082,0.887761576062151,1.44563678189826,0.5576208178438598]

是否有一种方法可以将我的值格式化为如下所示

[“+0.006%”、“+0.014%”、“+0.009%”、“-0.014%”、“+0.013%”、“-0.027%”


只需在映射闭包中返回字符串

let percentages = [0] + zip(values, values.dropFirst()).map {      (old, new) in     
    let value = (100.0 * (new - old) / old)  
    return String(format: "%.3f%%", value)
}


您可以从一个
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所要求的


这个将提供+/-符号。

使用
NumberFormatter
,将
numberStyle
设置为
。百分比
无需将浮点数转换为NSNumber。您可以使用
Formatter
s
string(for:Any)
method@LeoDabus“您的字符串只显示负数的信号。”-是的,但这是一个起点,必须给OP一些事情做;)。也许只是我,但“您可以使用格式化程序字符串(for:Any)方法”在过去对我不起作用(最近可能发生了变化,但我的旧代码就是这样工作的),我很确定它能工作。只需将的更改为@LeoDabus的就可以了,正如我所说,它过去不适合我,所以我只是复制并粘贴了它;)即使这与答案很接近,核心还是要将值降至
0.009
,而不是
0.888
[0.0, -2.651048088779294, 1.3299556681444034, -1.4375000000000082, 0.8877615726062151, 1.445631678189826, 0.5576208178438598]
.map{String(format:"%+6.3f%%",$0/100)}