我有一个数字数组,长度可以变化
let arrayNum = [1 ,5, 3, 12] // could also be [1, 5] or [1, 3, 5, 3, 1]
let sum = arrayNum.reduce(0, +)
我要使用这种方法来计算每个元素的百分比并显示在标签上
for value in arrayNum {
percentageLabel.text = "\(value * 100 / sum) %"
}
但是,百分比之和不等于100%
1 has 4%
5 has 23%
3 has 14%
12 has 57%
total % is 99%
有人在这种情况下有更好的解决方案吗?谢谢。
P.S我不希望它们的分数值像99.2%或40.56%。我只希望他们是99%或40%。
答案 0 :(得分:1)
您故意引入舍入错误,然后假装自己没有。那永远都行不通。
对于您给出的特定案例,发生,您可以通过四舍五入来解决问题:
let arrayNum = [1 ,5, 3, 12] // could also be [1, 5] or [1, 3, 5, 3, 1]
let sum = arrayNum.reduce(0, +)
for value in arrayNum {
let d = (Double(value) * 100 / Double(sum)).rounded()
let s = "\(Int(d))%"
percentageLabel.text = s
}
5%
24%
14%
57%
[total is 100%]
但是您不能指望这种方法能够普遍地起作用;数字就是那样。您必须在算术上诚实。