2011-09-16 32 views
4

在我的应用程序中,我有一个文本字段,当我点击该文本字段时,数字键盘将打开。现在我的问题是如何在打字时将该值转换为十进制格式,因为我必须只插入十进制值并在数字键盘中点(。)没有给出,所以当用户输入文本字段时,它会自动将该值转换为十进制格式。如何在输入时将文本字段格式设置为小数?

想,如果用户类型它会显示50.78格式,而打字。

+0

是小数点位置固定,这将一些数字 – Gypsa

+0

之前或之后来,如果是5或50或5000078将hapeen什么。 – Gypsa

+0

如果他只是输入'8'或'78',该怎么办? – EmptyStack

回答

7

您可以简单地通过 “0.01” 乘数(小数点后两位),并使用字符串格式 “%.2lf”。在textField:shouldChangeCharactersInRange:withString:方法中写下面的代码。

+0

谢谢你工作正常。 – Developer

+0

欢迎您! – EmptyStack

3

试试这个。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
    replacementString:(NSString *)string { 

    double currentValue = [textField.text doubleValue]; 
    double cents = round(currentValue * 100.0f); 

    if ([string length]) { 
     for (size_t i = 0; i < [string length]; i++) { 
      unichar c = [string characterAtIndex:i]; 
      if (isnumber(c)) { 
       cents *= 10; 
       cents += c - '0'; 
      }    
     } 
    } else { 
     // back Space 
     cents = floor(cents/10); 
    } 

    textField.text = [NSString stringWithFormat:@"%.2f", cents/100.0f]; 
    if(cents==0) 
    { 
     [email protected]""; 
     return YES; 
    } 
    return NO; 
    } 
+0

这就解决了这个问题。但是你仍然可以通过简单的乘法和字符串格式来实现! – EmptyStack

+0

是的...但这是另一种选择.... – userar

0

谢谢使用者,它适用于我。林我的情况下,我需要格式化小数点后,像完成编辑时的货币本地化格式。

- (BOOL) textFieldShouldEndEditing:(UITextField *)textField { 

     NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
     formatter.numberStyle = NSNumberFormatterCurrencyStyle; 

     // im my case i need specify the currency code, 
     // but could have got it from the system. 
     formatter.currencyCode = @"BRL"; 

     NSDecimalNumber *decimalNumber = 
      [NSDecimalNumber decimalNumberWithString:textField.text]; 

    // keeping the decimal value for submit to server. 
    self.decimalValue = decimalNumber; 

    // formatting to currency string. 
    NSString * currencyString = [formatter stringFromNumber:decimalNumber]; 
    textField.text = currencyString; 

}

相关问题