Отображение десятичной точки с помощью строки NSStringWithFormat в Objective C - PullRequest
1 голос
/ 14 декабря 2010

Я полный новичок в разработке C / iPad, но я пытаюсь построить простой четырехфункциональный калькулятор на iPad.

Моя самая большая сложность - просто отобразить ., когдадесятичная кнопка нажата.Вот что происходит, когда нажимается кнопка (например, две).

-(IBAction)inTwo:(id)sender {
    display = display*10+2;
    [resultfield setText:[NSString stringWithFormat:@"%f",display]];    
}

Попытка просто сделать

display = display*10+. 

Очевидно, не работает.Любой способ добавить точку в конец отображения?

Спасибо

Ответы [ 4 ]

1 голос
/ 14 декабря 2010

Если вы просто хотите отобразить его, вы можете сделать это:

[resultField setText:[NSString stringWithFormat:@"%f%@", display, @"."]];

Затем, в других ваших методах, перед тем как добавить, проверьте, есть ли десятичная точка:

-(IBAction)inTwo:(id)sender {
    if([resultField.text rangeOfString:@"."] == NSNotFound) {
        display = display*10+2;
        [resultfield setText:[NSString stringWithFormat:@"%f",display]];
    }
    else {
        display += 2/10 * (resultField.length - [resultField.text rangeOfString:@"."] +1)
        [resultfield setText:[NSString stringWithFormat:@"%f",display]];
    }
}

То, что вы делаете здесь, - это сначала проверка на наличие десятичной точки, чтобы определить, следует ли добавлять цифру в одно место или справа от десятичной точки. Если есть десятичная точка, мы добавляем цифру, деленную в десять раз на разницу между расположением десятичной точки и длиной всей строки.

0 голосов
/ 14 декабря 2010

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

Например,

-(IBAction)inTwo:(id)sender 
{
    NSString* displayedText = [resultField text];
    [resultfield setText:[NSString stringByAppendingString: @"2"]];
}

-(IBAction)inDecimal:(id)sender 
{
    if (![self isDecimalAlreadyPressed]) // only allowed one decimal in the number
    {
        NSString* displayedText = [resultField text];
        [resultfield setText:[NSString stringByAppendingString: @"."]]; // actually want the localised character really
        [self setDecimalAlreadyPressed: YES];
    }
}

Затем, когда вам нужно что-то вычислить:

-(double) displayAsDouble
{
    NSDecimalNumber* displayAsDecimal = [NSDecimalNumber decimalNumberWithString: [resultField text]];
    return [displayAsDecimal doubleValue];
}

Кстати, рассмотрите возможность оставить число как NSDecimalNumber .В NSDecimalNumber есть методы для выполнения простой арифметики, и они работают в базе 10, так что вы можете использовать их и избежать множества неприятных проблем с представлением чисел с плавающей запятой.

0 голосов
/ 14 декабря 2010

Вы только немного пропустили:

[resultfield setText:[NSString stringWithFormat:@"%f.", display]];

Если по какой-то причине парсер идентифицирует десятичную точку после% f в качестве какого-либо спецификатора точности с плавающей запятой или чего-то еще (почти положительно, что это не делает), просто экранируйте десятичную точку: *

[resultfield setText:[NSString stringWithFormat:@"%f\.", display]];
0 голосов
/ 14 декабря 2010
resultfield.text = [result.text stringByAppendingString:@"."];

Вы не можете добавить точку к display, поскольку это не строка.

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