UIKeyboardTypeDecimalPad - изменить запятую на точку - PullRequest
3 голосов
/ 11 мая 2011

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

myTextField.keyboardType=UIKeyboardTypeDecimalPad;

Как изменить запятую на разделитель точек?

У меня есть финский язык.С запятой, десятичные дроби не работает в моем приложении.

-(IBAction)calculate {
    float x = ([paino.text floatValue]) / ([pituus.text floatValue]) *10000;    
    label.text = [[NSString alloc] initWithFormat:@"%0.02f", x];
}

Ответы [ 2 ]

10 голосов
/ 11 мая 2011

ОК, поэтому вы редактируете текстовое поле с помощью цифровой клавиатуры, которая зависит от текущей локали, и, таким образом, получаете текстовое представление числа, которое также зависит от текущей локали. После того как редактирование закончено, вы читаете его и хотите преобразовать в число

Для конвертации вы бы использовали NSNumberFormatter следующим образом:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];

Вы можете настроить форматтер по своему усмотрению, настройку локали (!), Ограничений, форматирования, десятичного разделителя / разделителя на группы, количества десятичных цифр и т. Д. Затем вы просто используете его:

float number = [nf numberFromString: field.text];

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

EDIT

это средство форматирования валюты, которое может конвертировать между строкой и числом для валют:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle: NSNumberFormatterCurrencyStyle];
[nf setRoundingMode: NSNumberFormatterRoundHalfUp];
[nf setMaximumFractionDigits: 2]

это форматирование в процентах с 4 десятичными разрядами:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle: NSNumberFormatterPercentStyle];
[nf setRoundingMode: NSNumberFormatterRoundHalfUp];
[nf setMaximumFractionDigits: 4];

в текущей локали.

Как видите, вы можете определить стиль, цифры, поведение при округлении и многое другое, в зависимости от чисел, которые вы пытаетесь ввести. Для получения более подробной информации (это действительно много, что вы можете сделать с NSNumberFormatter) вы должны прочитать документы Apple, это выходит за рамки ответа SO, чтобы описать все это.

В вашем случае, при условии, что Paino и Pituus также являются UITextFields:

-(IBAction)calculate {
    NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
    [nf setRoundingMode: NSNumberFormatterRoundHalfUp];
    [nf setMaximumFractionDigits: 2];

    float npaino = [[nf numberFromString: paino.text] floatValue];
    float npituus = [[nf numberFromString: pituus.text] floatValue];

    float x = npaino] / npituus *10000;    
    label.text = [nf stringFromNumber: [NSNumber numberWithFloat: x]];

    [nf release];
}

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

2 голосов
/ 18 ноября 2011

Так проще:
[[yourField text] stringByReplacingOccurferencesOfString: @ "," withString: @ "."]
Это будет работать во всех отношениях и на разных языках.

В вашем кодеэто будет:

-(IBAction)calculate {
    float fPaino = [[paino.text stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
    float x = fPaino / ([pituus.text floatValue]) *10000;    
    label.text = [[NSString alloc] initWithFormat:@"%0.02f", x];
}

Что-то еще: вам обязательно нужен «alloc» для результата?Поскольку label.text уже содержит его сохранение / освобождение, вы можете просто создать [NSString stringWithFormat: @ "% 0.02f", x]

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