我认为这将是相当简单的,但我似乎无法解决或找到一个涵盖我的情况的现有问题.
最初我设置了一些变量如下:
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,但我离题了)
我真正想要的是在显示值之前向上或向下舍入到最接近的整数的值.换句话说,我想要的是
那就是我想在显示的结果中根本没有小数位.目前,它正确地向上/向下舍入,但最后显示".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)
归档时间: |
|
查看次数: |
12266 次 |
最近记录: |