相关疑难解决方法(0)

如何在Double中将Double舍入到最近的Int?

我正在尝试制作一个增长率(Double)的计算器,它将结果四舍五入到最接近的整数并从那里重新计算,如下:

let firstUsers = 10.0
let growth = 0.1
var users = firstUsers
var week = 0


while users < 14 {
    println("week \(week) has \(users) users")
    users += users * growth
    week += 1
}
Run Code Online (Sandbox Code Playgroud)

但到目前为止我一直无法做到.

编辑 我有点喜欢这样:

var firstUsers = 10.0
let growth = 0.1
var users:Int = Int(firstUsers)
var week = 0


while users <= 14 {
    println("week \(week) has \(users) users")
    firstUsers += firstUsers * growth
    users = Int(firstUsers)
    week += 1
}
Run Code Online (Sandbox Code Playgroud)

虽然我不介意它总是四舍五入,但我不喜欢它,因为 …

double int rounding swift

148
推荐指数
6
解决办法
13万
查看次数

在Swift中收集CGFloat

我怎样才能在Swift中收集CGFloat?我试过ceil(CDouble(myCGFloat))但只适用于iPad Air和iPhone 5S.

当在另一个模拟设备上运行时,我收到错误消息 'NSNumber' is not a subtype of 'CGFloat'

rounding cgfloat ceil swift

73
推荐指数
6
解决办法
7万
查看次数

使用round()在Swift中舍入

在玩游戏时,我在swift中找到了round()函数.它可以用如下:

round(0.8)
Run Code Online (Sandbox Code Playgroud)

哪个将按预期返回1.这是我的问题:

我怎么快速地绕千分之一?

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

rounding swift xcode6

47
推荐指数
5
解决办法
6万
查看次数

基于CGFloat的数学函数?

在OS X和iOS中,Apple使用CGFloat typedef自动获取float32位系统和double64位系统.但是当使用普通的Unix数学函数时,您需要根据具体情况做出决定.

例如,该floor()函数定义为:

double floor(double x);

并且该floorf()函数定义为:

float floorf(float x);

我知道今天所有的iOS设备都是32位,但是使用CGFloat的原因是在引入第一个64位iOS设备(iPad 5?)时自动提高精度,而不必更改任何代码.但为了实现这一点,我们需要基于CGFloat的数学函数:

CGFloat Floor(CGFloat x);

在iOS或任何第三方库中是否有类似的功能?或者其他开发者如何处理这个?我怀疑大多数要么CGFloatfloatiOS 上的-versions 一起使用,但是如果编译64位iOS设备(并处理代码库的两个不同版本),你将"需要"用数学函数更改每一行.

或者您可以使用float而不是在CGFloat任何地方,而不是担心64位iOS.但是,你会发现与Apple的库和恕我直言的丑陋代码不一致.

或者你可以CGFloatdouble-versions 一起使用,只需要让编译器一直在double和float之间进行转换.而不是关心可能的"隐式转换为32位类型"警告.

或者也许是最好的策略,没有任何64位版本的iOS的赌注将会到来(或者至少在未来足够的时候),CGFloat并与floatUnix数学函数的转换一起使用,而不用担心未来.

你用什么策略?

iphone objective-c ios

32
推荐指数
1
解决办法
1万
查看次数

如何安全地将CGFloat放置或嵌入到int?

我经常需要地板或CEIL一CGFloatint,对于数组索引的计算.

我看到永久的问题floorf(theCGFloat)或者ceilf(theCGFloat)是有可与浮点不准确的麻烦.

那么,如果我CGFloat2.0f内部被表示为1.999999999999f或类似的东西,那该怎么办呢?我floorf并获得1.0f,这是再次浮动.然而,我必须把这个野兽施放到int,这可能会引入另一个问题.

是否有一个最佳实践如何楼或小区一floatint这样的东西像2.0永远不会意外遭到地板到1让人觉得2.0永远不会意外遭到ceiled来2

math floating-point floating-accuracy ios floating-point-precision

18
推荐指数
2
解决办法
3万
查看次数

CGFloat:圆形,底部,abs和32/64位精度

TLDR:如何在没有警告的情况下编译32位和64位CGFloats的方式调用标准浮点代码?


CGFloat定义为double或float,具体取决于编译器设置和平台.我正在尝试编写在两种情况下都能正常工作的代码,而不会产生很多警告.

当我使用floor,abs,ceil和其他简单浮点运算之类的函数时,我会收到关于值被截断的警告.例如:

警告:隐式转换将64位值缩短为32位值

我不关心计算的正确性或精度损失,因为我意识到我可以一直使用所有函数的双精度版本(floor而不是floorf等); 但是,我必须容忍这些错误.

有没有办法干净地编写支持32位和64位浮点数的代码,而不必使用大量的#ifdef __ LP64 __,或者为所有标准浮点函数编写包装函数?

objective-c cgfloat

11
推荐指数
1
解决办法
8176
查看次数

对于CGFloat,Swift相当于ceilf

我试图做这样的事情

var myCGFloat: CGFloat = 3.001
ceilf(myCGFloat)
Run Code Online (Sandbox Code Playgroud)

ceilfFloat取值.在搜索时,有很多关于进行此转换的不同答案,或者取决于它是32位还是64位架构.

事实证明解决方案相当容易,但我花了太长时间才找到它.所以我写这个Q&A对作为其他人的捷径.

cgfloat ceil swift

4
推荐指数
1
解决办法
2159
查看次数