源码

如何在Swift中将十进制格式化为百分比

我有一个函数可以找出数组中相邻值的百分比差异。

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.4375000000000082, 0.8877615726062151, 1.445631678189826, 0.5576208178438598]  

有没有办法可以将我的值格式化为如下所示/uff1a

["+0.006%","+0.014%","+0.009%","-0.014%","+0.013%","-0.027%"]  

/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014/u2014

可以从NumberFormatter开始/uff0c例如/u2026

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

它会如下显示/uff1a

["0%", "-2.651%", "1.33%", "-1.438%", "0.888%", "1.446%", "0.558%"]

字符串只显示负数的信号。这不是OP要求的。

所以输入/uff1a

print(percentages.map { ($0 >= 0 ? "+" : "") + formatter.string(for: $0 / 100.0)! })

或者/uff1a

formatter.positivePrefix = "+"
//....
print(percentages.compactMap { formatter.string(for: $0 / 100.0) })

显示的是/uff1a

["+0%", "-2.651%", "+1.33%", "-1.438%", "+0.888%", "+1.446%", "+0.558%"]

值的格式似乎与所生成的值不匹配/uff0c例如/uff0c0.8877615726062151将是0.8%/uff0c而不是0.009%/uff0c因此需要进行轻微的定制/uff0c这最好通过稍微/u201c捏造/u201d值来实现。

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

改成了/uff1a

print(percentages.compactMap { formatter.string(for: $0 / 10000.0) })

现在显示的是/uff1a

["+0.000%", "-0.027%", "+0.013%", "-0.014%", "+0.009%", "+0.014%", "+0.006%"]

这就对啦/uff01

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/ruhezaiswiftzhongjiangshijinzhigeshihuaweibaifenbi.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:8 月 25, 2019 at 04:23 下午

热评文章