用Swift和round()四舍五入

用Swift和round()四舍五入,swift,xcode6,rounding,Swift,Xcode6,Rounding,在玩的时候,我在swift中找到了round()函数。可按如下方式使用: round(0.8) 它将返回1,如预期的那样。我的问题是: 如何在swift中以千分之一的速度旋转? 我希望能够插入一个数字,比如说0.6849,然后返回0.685。round()是如何做到这一点的?或者,在这种情况下,它不是有什么功能吗?您可以执行以下操作: round(1000 * x) / 1000 这里有一个方法。您可以轻松地为Float执行此操作,或者可能将其设置为通用的,以便适用于其中任何一种 publi

在玩的时候,我在swift中找到了round()函数。可按如下方式使用:

round(0.8)
它将返回1,如预期的那样。我的问题是:

如何在swift中以千分之一的速度旋转?

我希望能够插入一个数字,比如说0.6849,然后返回0.685。round()是如何做到这一点的?或者,在这种情况下,它不是有什么功能吗?

您可以执行以下操作:

round(1000 * x) / 1000

这里有一个方法。您可以轻松地为
Float
执行此操作,或者可能将其设置为通用的,以便适用于其中任何一种

public extension CGFloat {
    func roundToDecimals(decimals: Int = 2) -> CGFloat {
        let multiplier = CGFloat(10^decimals)
        return round(multiplier * self) / multiplier
    }
}

这将四舍五入到任何不受10次幂限制的值

extension Double {
    func roundToNearestValue(value: Double) -> Double {
        let remainder = self % value
        let shouldRoundUp = remainder >= value/2 ? true : false
        let multiple = floor(self / value)
        let returnValue = !shouldRoundUp ? value * multiple : value * multiple + value
        return returnValue
    }
}
最新答案
四舍五入(someDecimal)
是旧的C风格。从Swift 3开始,双打和浮标具有内置的Swift功能

var x = 0.8
x.round() // x is 1.0 (rounds x in place)

有关如何使用差异的更多详细信息,请参见我的答案(或)

正如其他答案所指出的,如果你想四舍五入到第千位,那么在四舍五入之前,先暂时乘以
1000

Swift 4:

(x/1000).rounded()*1000

请看一看苹果的和文档

输出:

1.23
您得到的输出是字符串类型。因此,如果需要,您需要转换为其他类型。下面的链接告诉您如何转换:


round(1000*x)/1000
在最简单的情况下,使用
round(x*1000)/1000
。另请参阅使用
NSDecimalNumber
NSNumberFormatter
字符串初始值设定项
,等查找双精度整数的其他方法。`static func round_pow_2(value:CGFloat,decimalPlaces:CGFloat)->CGFloat{let decimalValue=pow(2.0,decimalPlaces)返回舍入(value*decimalValue)/decimalValue}`可能只是我,但该函数没有多大意义?为SWIFT 3更新:
someval.rounded()
10^decimal执行按位异或运算。应将其替换为pow或应使用powf。如果原始问题中给出的
x
为0.6849,则该值为0。应该是
(x*1000)。rounded()/1000
欢迎链接到解决方案,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及为什么存在,然后引用您链接到的页面的最相关部分,以防目标页面不可用。
(x/1000).rounded()*1000
var a=1.2344 
var b:String = String(format: "%0.2f",a) 
print(b)
1.23