ios

2012-08-03 30 views
33

Üzerinde para birimi nasıl düzgün biçimlendirilir TextField kesmeksizin bir dizeyi para birimine biçimlendirmenin bir yolunu arıyorum.ios

Örneğin, "521242" sayısını "5,212.42" 'a dönüştürmek istiyorum. Veya 1 $ altında bir numaram varsa, şöyle görünmesini isterim: "52" -> "0.52 "

Teşekkür

cevap

64

muhtemelen böyle bir şey istiyorum (para birimini varsayarak bir şamandıra olduğu alanı): 100,0 bölün gerekebilir 52 0,52 olarak gereksinimleri itibaren

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:currency]]; 

tedavi etmek.

Bu yaklaşımla ilgili güzel olan şey şu anki yerel ayarlara saygı göstermesidir. Dolayısıyla, uygun olduğu yerde örneğinizi "5.212,42" şeklinde biçimlendirir.

Güncelleme: Belki de benim örneğimi yazarken biraz hızlandı. Aşağıda Conrad Shultz tarafından belirtildiği gibi, para birimi miktarlarıyla uğraşırken, miktarları NSDecimalNumber s olarak saklamak tercih edilir. Bu yuvarlama hataları ile baş ağrısı büyük ölçüde azaltacaktır. Bunu yaparsanız yukarıdaki kod parçacığı (varsayarak para bir NSDecimalNumber* olan) olur: Bu kodu kullanmak

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
NSString *numberAsString = [numberFormatter stringFromNumber:currency]; 
+29

Kesin değerler (özellikle para birimi) için asla şamandıraları kullanmayın! NSDecimalNumber/NSDecimal kullanın. –

+0

Harika!Çalışıyordum ama çift ondalık ile mücadele ediyordum. Onu çok özledim. Teşekkür ederim! –

+0

Çok hoş geldiniz! – idz

12

. Bana

1) Bu çalışma bu kodu ekleyin) dosyasını

2 Üstbilgiye UITextField temsilci ekleyin (ARC

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

NSString *cleanCentString = [[textField.text 
           componentsSeparatedByCharactersInSet: 
           [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] 
          componentsJoinedByString:@""]; 
// Parse final integer value 
NSInteger centAmount = cleanCentString.integerValue; 
// Check the user input 
if (string.length > 0) 
{ 
    // Digit added 
    centAmount = centAmount * 10 + string.integerValue; 
} 
else 
{ 
    // Digit deleted 
    centAmount = centAmount/10; 
} 
// Update call amount value 
NSNumber *amount = [[NSNumber alloc] initWithFloat:(float)centAmount/100.0f]; 
// Write amount with currency symbols to the textfield 
NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init]; 
[_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[_currencyFormatter setCurrencyCode:@"USD"]; 
[_currencyFormatter setNegativeFormat:@"-¤#,##0.00"]; 
textField.text = [_currencyFormatter stringFromNumber:amount]; 
return NO; } 
+6

Kesin değerler için (özellikle para birimi) asla şamandıralar kullanmayın! NSDecimalNumber/NSDecimal kullanın. –

+0

harika çalışıyor! – RyanG

3

şu kodu kullanın ve tüm sorunlarınızı çözecektir) etkin ...

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[currency doubleValue]]]; 
2

NSDecimalNumbers kullanarak AAV yanıtını yeniden işlediğimi budur.

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

NSString *cleanCentString = [[textField.text 
           componentsSeparatedByCharactersInSet: 
           [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] 
          componentsJoinedByString:@""]; 


// Parse final integer value 
NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithMantissa:[cleanCentString integerValue] 
                  exponent:-2 
                 isNegative:NO]; 

NSDecimalNumber *entry = [NSDecimalNumber decimalNumberWithMantissa:[string integerValue] 
                  exponent:-2 
                 isNegative:NO]; 

NSDecimalNumber *multiplier = [NSDecimalNumber decimalNumberWithMantissa:1 
                  exponent:1 
                  isNegative:NO]; 

NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain 
                         scale:2 
                       raiseOnExactness:NO 
                       raiseOnOverflow:NO 
                       raiseOnUnderflow:NO 
                      raiseOnDivideByZero:NO]; 
NSDecimalNumber *result; 

// Check the user input 
if (string.length > 0) 
{ 
    // Digit added 
    result = [price decimalNumberByMultiplyingBy:multiplier withBehavior:handler]; 
    result = [result decimalNumberByAdding:entry]; 
} 
else 
{ 
    // Digit deleted 
    result = [price decimalNumberByDividingBy:multiplier withBehavior:handler]; 
} 

// Write amount with currency symbols to the textfield 
NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init]; 
[_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[_currencyFormatter setCurrencyCode:@"USD"]; 
textField.text = [_currencyFormatter stringFromNumber:result]; 

return NO; 
} 
6

hızlı 2,0 sürümü:

let _currencyFormatter : NSNumberFormatter = NSNumberFormatter() 
    _currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    _currencyFormatter.currencyCode = "EUR" 
    textField.text = _currencyFormatter.stringFromNumber(amount); 
+2

Hepsi bu değil Swift ... – brandonscript

1
func getCurrencyFormat(price:String)->String{ 
    let convertPrice = NSNumber(double: Double(price)!) 
    let formatter = NSNumberFormatter() 
    formatter.numberStyle = .CurrencyStyle 
    formatter.currencyCode = "USD"   

    let convertedPrice = formatter.stringFromNumber(convertPrice)  
    return convertedPrice! 
} 

Not: - Bir para birimi kodu bir ülkenin iki karakterli İnternet ülke oluşan üç harfli çoğu durumda, bir kod, olduğunu Kod artı para birimlerini göstermek için ekstra bir karakter. Örneğin, Avustralya doları için para birimi kodu “AUD” dir. Swift için

1

kod (ref AAV kodundan)

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{ 

    let strMain : NSString = string 

    let arrTemp : NSArray = (textField.text?.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))! 
    let str: NSString = arrTemp.componentsJoinedByString("") 

    //NSInteger centAmount = cleanCentString.integerValue; 
    var centAmount : NSInteger = str.integerValue 

    if (string.length > 0) 
    { 
     // Digit added 
     centAmount = centAmount * 10 + strMain.integerValue; 
    } 
    else { 
     // Digit deleted 
     centAmount = centAmount/10; 
    } 

    let amount = (Double(centAmount)/100.0) 

    let currencyFormatter = NSNumberFormatter() 
    currencyFormatter.numberStyle = .CurrencyStyle 
    currencyFormatter.currencyCode = "USD" 
    currencyFormatter.negativeFormat = "-¤#,##0.00" 
    let convertedPrice = currencyFormatter.stringFromNumber(amount) 

    print(convertedPrice) 

    txtAmount.text = convertedPrice! //set text to your textfiled 
    return false //return false for exact out put 
} 

not test: Eğer aşağıdaki gibi boş üzere CURRENCYSYMBOL kullanabilirsiniz girişten varsayılan para birimi simgesini kaldırmak istiyorsanız

currencyFormatter.currencyCode = nil 
currencyFormatter.currencySymbol = "" 

Mutlu kodlama!