【问题标题】:How to round smoothly 100 percentage in Swift如何在 Swift 中平滑 100%
【发布时间】:2019-02-24 03:30:06
【问题描述】:

我有一个长度可以变化的数字数组

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

【问题讨论】:

  • 只需将整数转换为双精度
  • @Nancy p 顺便说一句,它是重复的,无论如何你明白了,所以继续你想要的
  • 所以您正在创建一个舍入错误,然后抱怨存在舍入错误。是的,因为你创造了它。
  • "total % is 99%" 实际上是 98%。

标签: ios swift numbers int


【解决方案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%]

但你不能指望这种方法普遍;数字只是不那样工作。你必须在算术上诚实。

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2016-10-14
    • 1970-01-01
    相关资源
    最近更新 更多