将double的小数部分存储为int

时间:2015-10-28 19:39:09

标签: int double swift2

我目前正在Swift 2中为OS X创建一个应用程序,其中我有一个名为x的变量,类型为double,我不知道它是什么。我想对这个变量x做的是获取十进制值并将其存储为int。

这就是我想要做的事情:

var x:Double = some random value
var xdp:Int = decimal part of x

为了便于理解,我的变量x72.535,我希望变量xdp535。到目前为止,我已经能够x%1使用这个例子给我0.535,然后我可以用1000倍的时间给我535(这就是我想要的),但是如果该值为0.53,我最终得到530,这是我想要的10倍。

如何使用swift 2获取OS X的小数值?

很抱歉,如果这很难理解,我不知道怎么说。如果这很难理解,请告诉我,我会尽力重新说出来。

3 个答案:

答案 0 :(得分:2)

我会尝试使用 hack 这样使用String,如果它在您的上下文中可以接受:

{{1}}

但这只是一个技巧,所以在使用结果时不要忘记检查错误。

答案 1 :(得分:0)

这里棘手的是双打不能精确地存储大多数十进制数。您看到的短小数是字符串转换器舍入显示数字的结果。如果您想获得相同的结果,则需要在代码中进行一些舍入。

下面的代码是在C中(我不知道swift,但将它翻译成大多数其他语言应该相当容易。它应该在大多数明智的情况下给出你想要的结果。它假设int是32位。

double d1 = frac(x);
double d2 = (d1 * 10000000000.0);
if (tempd > 2147483647.0) d2 = d1 * 1000000000.0;
int xdp = (int)round(tempd);
while ((xdp > 0) && ((xdp % 10) == 0)) xdp = xdp /10;

答案 2 :(得分:0)

你的方法似乎没问题

import Darwin

let r0 = 0.750

let f4 = Int(round(r0 % 1 * 4))
print(r0, "is", f4, "quarters")
// 0.75 is 3 quarters

let f1000 = Int(round(r0 % 1 * 1000))
print(r0, "is", f1000, "thousendths")
// 0.75 is 750 thousendths