我目前正在Swift 2中为OS X创建一个应用程序,其中我有一个名为x
的变量,类型为double,我不知道它是什么。我想对这个变量x
做的是获取十进制值并将其存储为int。
这就是我想要做的事情:
var x:Double = some random value
var xdp:Int = decimal part of x
为了便于理解,我的变量x
是72.535
,我希望变量xdp
为535
。到目前为止,我已经能够x%1
使用这个例子给我0.535
,然后我可以用1000倍的时间给我535
(这就是我想要的),但是如果该值为0.53
,我最终得到530
,这是我想要的10倍。
如何使用swift 2获取OS X的小数值?
很抱歉,如果这很难理解,我不知道怎么说。如果这很难理解,请告诉我,我会尽力重新说出来。
答案 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