目标C - 如何将double转换为long

tom*_*tom 2 double objective-c long-integer

我有一个双值1318611498349.3559,我想通过执行以下操作将其转换为long,但我得到的值为-4506682935000170496,这对我来说似乎不对.

double dv = ...;
long lv = (double)dv;
...
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到关于此的一些文档?

Rus*_*uss 5

其他答案是正确的,因为double可以保存比任何整数类型大得多的值,但是如果double值在范围内,那么能够转换将是很好的.

编译器没有因为试图将双精度转换为long而导致攻击的原因是因为你实际上可以做到这一点.显然,计算机中的所有内容都存储为1和0的字符串,基本上你的代码所做的就是说取vIn并将这些位解释为长整数值.获取浮点值的位并将它们解释为整数类型很少有用,并且值不在double所代表的附近.

我其实是在尝试做相反的事情.我需要将长(实际上很长)转换为双倍.然后它击中了我,让NSNumber进行转换.使用所需的值创建临时NSNumber对象,然后使用该方法获取要返回的值的类型.

double vIn = 123.4321;
long vOut = [[NSNumber numberWithDouble:vIn] longValue];
Run Code Online (Sandbox Code Playgroud)

不能保证这会做你想要的.我猜测,如果double值大于long可以存储的值,它将返回最大值.