2013-06-13 4 views
0

Вечерние все,Xcode need Смешанные фракции, но я вижу быстрые фракции (ОБНОВЛЕНО)

Долгосрочный читатель впервые плакат!

Проблемы

Я пытаюсь преобразовать десятичные смешанные фракции, я новичок в кодировании и исчерпал все свои возможности, используя мои книги, которые я купил и другие посты я сумел получить мое небольшое приложение к виду работы в моду.

Это то, что я пытаюсь сделать: -

  • Я прошу у пользователя десятичного значения через текстовое поле
  • Они входят 1,25
  • он преобразует и вычисляет значение в виде дроби
  • затем он выводит значение 5/4
  • Но мне нужно, чтобы это было 1 1/4

я знаю (а я надеюсь, что я что-то просто не хватает), но я просто попал я полностью confused.com

Кодекс

- (int)gcdForNumber1:(int) m andNumber2:(int) n 
{ 
    while(n!= 0) // execute loop until m == n 
    { 
    int temp = n; n = m % temp; m = temp; 
    } 
    return (m); 
} 


- (int)tenRaisedTopower:(int)decimalLength 
    { 
    int answer = 10; 
    while (decimalLength!= 1) { 
     answer *= 10; 
     decimalLength -- ; 
    } 
    return answer; 
} 

- (void)floatToFraction:(float)decimalNumber 
{ 
    NSString *decimalString = [NSString stringWithFormat:@"%f", decimalNumber]; 
    NSArray *components = [decimalString componentsSeparatedByString:@"."]; 
    int decimalLength = [[components objectAtIndex:1] length]; 
    int n = [self tenRaisedTopower:decimalLength]; 
    int m = [[components objectAtIndex:1] intValue]; 
    int gcd = [self gcdForNumber1:m andNumber2:n]; 
    int numer = m/gcd; 
    int deno = n/gcd; 
    int fractionnumer = ([[components objectAtIndex:0] intValue] * deno) + numer; 
    NSString *fractionvalue = [[NSString alloc] initWithFormat:@"%d/%d", fractionnumer, deno ]; 
    self.metersFractionalOutput.text = fractionvalue; 

} 

Спасибо за обратную связь Martin R, указатель помог мне начать процесс по математике, поэтому я уверен, что есть, вероятно, более эффективный способ сделать это, но я решил это, выполнив следующие

- (int)gcdForNumber1:(int) m andNumber2:(int) n 
{ 
    while(n!= 0) // execute loop until m == n 
    { 
    int temp = n; n = m % temp; m = temp; 
    } 
    return (m); 
} 


- (int)tenRaisedTopower:(int)decimalLength 
    { 
    int answer = 10; 
    while (decimalLength!= 1) { 
     answer *= 10; 
     decimalLength -- ; 
    } 
    return answer; 
} 

- (void)floatToFraction:(float)decimalNumber 
{ 
    NSString *decimalString = [NSString stringWithFormat:@"%f", decimalNumber]; 
    NSArray *components = [decimalString componentsSeparatedByString:@"."]; 
    int decimalLength = [[components objectAtIndex:1] length]; 
    int n = [self tenRaisedTopower:decimalLength]; 
    int m = [[components objectAtIndex:1] intValue]; 
    int gcd = [self gcdForNumber1:m andNumber2:n]; 
    int numer = m/gcd; 
    int deno = n/gcd; 
    self.wh = [[components objectAtIndex:0] intValue]; 

    if (numer > deno) 
     { 
     int extra = numer/deno; 
     numer -= extra * deno; 

    } 


    NSString *fractionvalue = [[NSString alloc] initWithFormat:@"%d ""%d/%d", self.wh, numer, deno ]; 
    self.metersFractionalOutput.text = fractionvalue; 

еще раз спасибо надеюсь, что это помогает кто-то ещеMr H

+0

Ваша линия 'INT fractionnumer = ...' 'явно вычисляет * Дино + Numer = 1 * 4 + 1 = 5', который затем помещается в «значение фракции». –

+0

Случай 'if (number> demo)' никогда не может произойти :-) - Но вы решили свою проблему, это хорошо! –

ответ

0

См второй фрагмент кода выше для деталей на ответ/обходного

Mr H

Смежные вопросы