在Swift中,如何显示向上或向下舍入的百分比值,没有小数位

Mon*_*eth 10 swift

我认为这将是相当简单的,但我似乎无法解决或找到一个涵盖我的情况的现有问题.

最初我设置了一些变量如下:

var score :Int! = 0
var totalquestionsasked :Int! = 0
var percentagecorrect :Int! = 0
Run Code Online (Sandbox Code Playgroud)

这使我的所有值都计算好了,但我遇到了百分比问题.

我的百分比基本公式是:

percentagecorrect = score / totalquestionsasked * 100
Run Code Online (Sandbox Code Playgroud)

但是,在文本标签中使用值时,无法显示此内容.

所以经过一些研究,我改变了我的变量:

var score :Double = 0.0
var totalquestionsasked :Double = 0.0
var percentagecorrect :Double = 0.0
Run Code Online (Sandbox Code Playgroud)

仍然使用相同的百分比公式:

percentagecorrect = score / totalquestionsasked * 100
Run Code Online (Sandbox Code Playgroud)

然而,虽然这显示没问题,但我不想要所有小数位.经过一些研究后,我在另一个问题中遇到了一个扩展,并根据我的应用进行了调整.我的扩展是:

extension Double {
    var roundTo0f: Double {return Double(round(1*self)/1) }
    var roundTo1f: Double {return Double(round(10*self)/10) }
    var roundTo2f: Double {return Double(round(100*self)/100)  }
    var roundTo3f: Double {return Double(round(1000*self)/1000) }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用扩展程序如下:

percentagecorrect = score / totalquestionsasked * 100
let percentagevalue: Double = percentagecorrect.roundTo0f
labelPercent.text = "\(percentagevalue)"
Run Code Online (Sandbox Code Playgroud)

最终的结果是,这非常接近我想要的.但它仍然显示百分比到1位小数.(另外,它不准确 - 我的意思是,如果得分为1且问题的数量为3,则上面的代码显示百分比为33.0而不是33.3,但我离题了)

我真正想要的是在显示值之前向上或向下舍入到最接近的整数的值.换句话说,我想要的是

  • 如果值为33.3,则向下舍入为33并显示为33
  • 如果值为66.6,则将其舍入为67并显示为67

那就是我想在显示的结果中根本没有小数位.目前,它正确地向上/向下舍入,但最后显示".0".如果这是不可能的,那么我希望它正确显示到一个小数位.

我是编程新手,Swift是我想学的第一门语言,所以也许这只是一个新手的错误,但我真的找不到我做错了什么.

我如何让它工作?

tot*_*tiG 13

您可以使用内置的round函数并转换为Int.

print(Int(round(33.3)))
print(Int(round(66.6)))
Run Code Online (Sandbox Code Playgroud)

如果您想要一个扩展方法来返回一个字符串,您可以使用:

extension Double {
    func roundTo(decimalPlaces: Int) -> String {
        return NSString(format: "%.\(decimalPlaces)f", self) as String
    }
}
Run Code Online (Sandbox Code Playgroud)