Другие ответы верны в том смысле, что double может содержать значения, значительно превышающие любой целочисленный тип, однако, если значение double находится в пределах диапазона, было бы неплохо иметь возможность преобразовать.
Причина, по которой компиляторне пытается вас обмануть, если вы пытаетесь просто бросить дубль в длинную, потому что вы действительно можете это сделать.Очевидно, что все в компьютере хранится в виде строк из 1 и 0, в основном ваш код говорит: возьмите vIn и интерпретируйте биты как длинное целое значение.Взятие битов значения с плавающей запятой и интерпретация их как целочисленного типа редко полезно, и значение не близко к тому, что представляет двойное число.
Я фактически пытался сделать обратное.Мне нужно было конвертировать long (на самом деле long long) в double.Тогда меня поразило, пусть NSNumber сделает конвертацию.Создайте временный объект NSNumber со значением, которое вы хотите, затем используйте метод, чтобы получить тип значения, которое вы хотите вернуть.
double vIn = 123.4321;
long vOut = [[NSNumber numberWithDouble:vIn] longValue];
Нет гарантий, что это будет делать то, что вы хотите.Я предполагаю, что если значение double больше, чем то, что может хранить long, оно просто вернет максимальное значение.