2012-04-29 2 views
2

У меня проблема. Мне нужно получить два числа и добавить их вместе так, чтобы одна была десятичной точкой другой. Например:Добавить числа в конец десятичной точки (Objective-c)

double number1 = 20; 
double number2 = 142; 

Мне нужно добавить эти цифры вместе, чтобы получить 20.142. Есть ли способ сделать это?

Благодаря

ответ

-1
bool negative = (number1 < 0.0); 

if (negative) 
    number1 = 0 - number1; 
while (number2 >= 1.0) 
    number2 = number2/10.0; 

double finalnum = number1 + number2; 
if (negative) 
    finalnum = 0 - finalnum; 

Это довольно просто. Сначала определим, является ли number1 отрицательным, и если да, сделайте его положительным и установите булевский флаг. Затем мы просто продолжаем разделять number2 на 10.0 до тех пор, пока оно не станет меньше 1.0 (это означает, что теперь он находится на диапазоне [0, 1), если предположить, что он положительный). Затем мы просто добавим два числа вместе и сохраним их в finalnum, и если negative - true (YES), отрицание finalnum.

Это решение может быть также решено с использованием логарифмов базы 10, чтобы определить сумму для деления number2, но это, скорее всего, займет больше времени.

Вы также можете решить это на turning those numbers into const char* or CFString (Objective-C) strings and then concatenate them followed by an interpretation of the resulting string as a double, но опять же, это займет больше времени.

Есть два предостережения к этому коду:

  1. number1 и number2 должны быть целыми числами (если number1 было, скажем, 1.5 и number2 был 25.7, finalnum будет 1.757)
  2. number2 должен быть положительным
2

наивным образом:

double res, number1 = 20, number2 = 142; 
while (number2 >= 1) { 
    number2 /= 10; 
} 
res = number1 + number2; 
+0

@BinyaminSharet Вы хотите, чтобы я дал вам ожидаемый ответ, если 142 был отрицательным? – CoreCode

+0

@CoreCode - Нет, что бы вы ожидали в результате, если number2 был -142? – MByD

+3

Возможно, вы захотите отредактировать свой вопрос, указав, что вы имеете дело с отрицательными номерами, и укажите, какой ожидаемый результат был бы, если number2 является отрицательным. Это имеет смысл для number1, но поскольку число2 просто добавляется к концу десятичной точки, это не имеет смысла. – BTownTKD

4

Вы можете использовать математику . (Дун Дун DUNNNNNNN!)

double number3 = number1 + (number2/1000); 

Таким образом, проблема становится; как вы определяете силу 10 для разделения вашего второго номера?

Существует, конечно, много способов сделать это. С головы до ног вы можете запустить цикл, который непрерывно увеличивает мощность десяти до тех пор, пока он больше, чем текущее значение number2.

Если вы имеете дело с отрицательным числом для number1, то вы хотите добавить если заявления, чтобы увидеть, если число < 0. Если это так, вы хотите, чтобы вычесть вместо оного.

Если вы имеете дело с отрицательным числом для number2, ну ... это просто глупо.

+0

Lol для dun dun dun :-) – Lefteris

+4

math.ceil (log10 (number2)) должен помочь с поставленным вами вопросом. – Femaref

5

Simplistic решение:

double result = [[NSString stringWithFormat:@"%i.%i", (int)number1, (int)number2] doubleValue]; 
Смежные вопросы