2013-03-06 3 views
0

У меня возникла проблема, но, похоже, не удалось найти решение. У меня есть текстовое поле, в котором пользователь вводит числа. Проблема заключается в том, что когда пользователь вводит последнюю цифру как ноль после десятичной точки, это не принимает.eg - 42,70 печатается как 42.7.Find код нижеNsNumberFormatter не дает корректного результата

NSNumberFormatter *_numberFormatter =[NSNumberFormatter new]; 
    _numberFormatter.maximumFractionDigits=2; 
    _numberFormatter.minimumIntegerDigits=1; 
    _numberFormatter.roundingMode=kCFNumberFormatterRoundCeiling; 
    _numberFormatter.allowsFloats=YES; 
    [email protected]","; 
    _numberFormatter.usesGroupingSeparator=YES; 
    _numberFormatter.groupingSize=3; 
    _numberFormatter.minimum=[NSNumber numberWithInt:0]; 
    [_numberFormatter setLenient:YES]; 
    [_numberFormatter setUsesSignificantDigits:NO]; 

и

NSNumber *number = [nf numberFromString:combinedString]; 
    NSString *formattedString = [nf stringFromNumber:number]; 

отформатирована строка печать Введенного значения SANs 0, если ввести в последнем месте, но он печатает правильный номер, если любая другая цифра есть, как и 42,78, напечатано, как это было, но 43,70 печатается как 43,7.

я упускаю установку некоторых parameters.Any помощи необходимо

Заранее спасибо

ответ

2

Установить как

_numberFormatter.maximumFractionDigits = 2; 
_numberFormatter.minimumFractionDigits = 2; 

, если вы всегда хотите напечатать две цифры после десятичного разделителя.

+0

Я пробовал это, но тогда даже если пользовательские типы 4 в текстовом поле, он будет возвращаться как 4.00, и он не сможет ввести далее. Так что не может этого сделать. –

+0

@dead_soldier, попробуйте использовать два форматирования, один для ввода, один для вывода – vikingosegundo

+0

@dead_soldier: Вы заменяете текст в текстовом поле во время ввода пользователем? –

0

Вы можете использовать это:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; 
[fmt setPositiveFormat:@"0.##"]; 
NSNumber *n = [NSNumber numberWithFloat:47.78]; 
NSLog(@"%@", [fmt stringFromNumber:n]); 

он напечатает 47,78

+0

Он печатает цифры после десятичной дроби правильно даже сейчас, но проблема связана с тем, когда пользователь вводит 0 в конце, например 12.50.It не возвращает 12.50, но 12.5. Я знаю, что это то же самое, но нужно показать пользователю как 12.50 –

0

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

NSArray *formatArr = [combinedString componentsSeparatedByString:@"."]; 
    NSString *str = [formatArr lastObject]; 
    NSString *code; 
    if ([str length] >0) { 
     code = [[formatArr lastObject] substringFromIndex: [str length] - 1]; 
     if ([str isEqualToString:@"00"]) 
     { 

     } 
     else 
     { 
      if ([combinedString hasSuffix:@".0"]) 
      { 
       formattedString=[formattedString stringByAppendingString:@".0"]; 
      } 
      else if ([code isEqualToString:@"0"]) { 
       formattedString = [formattedString stringByAppendingString:@"0"]; 
      } 
     } 
    } 
    else 
    { 
     if ([combinedString hasSuffix:@".0"]) 
     { 
      formattedString=[formattedString stringByAppendingString:@".0"]; 
     } 
    } 

Комбинированная строка вводится пользователем ввода. Я проверяю значение '.' место и проверка, если последняя цифра равна нулю. Если это так, то добавление нуля из моего собственного. Теперь пользователь может видеть 43.50, когда он вводит его вместо 43.5