Как преобразовать двойной в NSInteger? - PullRequest
6 голосов
/ 12 января 2011

Очень простой вопрос здесь. У меня есть двойник, который я хочу преобразовать обратно в NSInteger, усекать до места единиц. Как бы я это сделал?

Ответы [ 5 ]

15 голосов
/ 12 января 2011

Усечение - это неявное преобразование:

NSInteger theInteger = theDouble;

Предполагается, что вы не проверяете, что значение находится в пределах диапазона NSInteger. Если вы хотите сделать это, вам нужно добавить ветвление:

NSInteger theInteger = 0;
if (theDouble > NSIntegerMax) {
    // ...
} else if (theDouble < NSIntegerMin) {
    // ...
} else {
    theInteger = theDouble;
}
4 голосов
/ 12 января 2011

NSInteger - это typedef для типа C. Так что вы можете просто сделать:

double originalNumber;
NSInteger integerNumber = (NSInteger)originalNumber;

Который, согласно спецификации C, будет обрезать исходный номер.

1 голос
/ 12 января 2011

NSInteger - это typedef, это то же самое, что использование int. Просто присвойте значение как:

double d;<br/> NSInteger i = d;

1 голос
/ 12 января 2011

но в любом случае, если вы не хотите округлять, я считаю, что это должно работать просто

double myDouble = 10.4223;
NSInteger myInt = myDouble;

редактировать для округления: (я уверен, что есть гораздо более простой (и точный) способ сделать это .. (это также не учитывает отрицательные числа или максимальные границы)

double myDecimal = myDouble - myInt;
if(myDecimal < 0.50)
{
//do nothing
}
else
{
myInt = myInt + 1;
}
0 голосов
/ 10 сентября 2014

JesseNaugher упоминает округление, и я отмечаю, что потребности OP были удовлетворены простым усечением, но в духе полного обобщения стоит вспомнить простой прием добавления 0,5 к двойному числу перед вызовом floor () для достижения округления.Расширение комментария Джонатана Гринспана: NSInteger myInt = floor(myDouble + 0.5); то есть округление в абсолютных терминах.Если округление «вверх» означает округление от нуля, необходим более сложный подход: NSInteger myInt = floor( myDouble + (myDouble < 0.0 ? -0.5 : 0.5) );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...