Как плавно округлить 100 процентов в Swift - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть массив чисел, длина которого может варьироваться

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%

У кого-нибудь есть лучшее решение в этом случае?Спасибо.

PS Я не хочу, чтобы у них были значения дроби, такие как 99,2% или 40,56%.Я только хочу, чтобы они были 99% или 40%.

1 Ответ

0 голосов
/ 20 сентября 2018

Вы сознательно вводите ошибку округления, а затем пытаетесь сделать вид, что не сделали этого.Это никогда не сработает.

Случается , что для заданных вами конкретных случаев вы можете решить проблему, округлив:

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%]

Но вы не можете ожидать такого подхода к работе повсеместно ;числа просто так не работают.Вы должны быть арифметически честными.

...