Big*_*ire 3 string floating-point double ios 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)
Run Code Online (Sandbox Code Playgroud)
[0.0, -2.651048088779294, 1.3299556681444034, -1.4375000000000082, 0.8877615726062151, 1.44563162787878300000000000000000000000000000000082, 0.8877615726062151, 1.4458631626787840
有没有办法可以将我的值格式化为如下所示
["+0.006%","+0.014%","+0.009%","-0.014%","+0.013%","-0.027%"]
NumberFormatter例如,您可以从 a 开始...
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)) })
Run Code Online (Sandbox Code Playgroud)
这将打印类似....
["0%", "-2.651%", "1.33%", "-1.438%", "0.888%", "1.446%", "0.558%"]
Run Code Online (Sandbox Code Playgroud)
您的字符串仅显示负数信号。这不是 OP 所问的。
天堂禁止 OP 可能实际上必须做“一些”工作
print(percentages.map { ($0 >= 0 ? "+" : "") + formatter.string(for: $0 / 100.0)! })
Run Code Online (Sandbox Code Playgroud)
或者,最好...
formatter.positivePrefix = "+"
//....
print(percentages.compactMap { formatter.string(for: $0 / 100.0) })
Run Code Online (Sandbox Code Playgroud)
打印...
["+0%", "-2.651%", "+1.33%", "-1.438%", "+0.888%", "+1.446%", "+0.558%"]
Run Code Online (Sandbox Code Playgroud)
如果可能的话,你能解释一下如何伪造数字吗?
值的格式似乎与您生成的值不匹配,例如,0.8877615726062151would be 0.8%,not 0.009%,因此您可以进行轻微的自定义,最好通过稍微“捏造”值来实现。
所以,再一次,从......
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.minimumIntegerDigits = 1
formatter.maximumIntegerDigits = 1
formatter.maximumFractionDigits = 3
formatter.minimumFractionDigits = 3
formatter.positivePrefix = "+"
Run Code Online (Sandbox Code Playgroud)
我修改了
print(percentages.compactMap { formatter.string(for: $0 / 100.0) })
Run Code Online (Sandbox Code Playgroud)
到
print(percentages.compactMap { formatter.string(for: $0 / 10000.0) })
Run Code Online (Sandbox Code Playgroud)
现在打印
["+0.000%", "-0.027%", "+0.013%", "-0.014%", "+0.009%", "+0.014%", "+0.006%"]
Run Code Online (Sandbox Code Playgroud)
根据我的观察,这似乎是您的目标 - 您只需免费获得本地化
| 归档时间: |
|
| 查看次数: |
4140 次 |
| 最近记录: |