2012-08-03 11 views
33

पर मुद्रा को सही ढंग से प्रारूपित करने के लिए कैसे मैं टेक्स्टफिल्ड हैक का उपयोग किये बिना मुद्रा में स्ट्रिंग को प्रारूपित करने का एक तरीका ढूंढ रहा हूं।आईओएस

उदाहरण के लिए, मैं "521242" को "5,212.42" में परिवर्तित करना चाहता हूं या यदि मेरे पास 1 $ से कम संख्या है, तो मैं इसे इस तरह दिखाना चाहूंगा: "52" -> "0.52 "

धन्यवाद

उत्तर

64

आप शायद कुछ इस तरह चाहते हैं (मुद्रा यह सोचते हैं एक नाव है): 52 0.52 के रूप में आप 100.0 से विभाजित करने के लिए आवश्यकता हो सकती है

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

अपनी आवश्यकताओं से इलाज करने के लिए।

इस दृष्टिकोण के बारे में अच्छी बात यह है कि यह वर्तमान लोकेल का सम्मान करेगा। तो, जहां उचित हो यह आपके उदाहरण को "5.212,42" के रूप में प्रारूपित करेगा।

अद्यतन: मैं शायद, उदाहरण के लिए पोस्ट करने में थोड़ा तेज़ था। जैसा कि मुद्रा रकम से निपटने के दौरान, कॉनराड शल्ट्ज़ द्वारा इंगित किया गया है, मात्रा को NSDecimalNumber एस के रूप में स्टोर करना बेहतर होगा। यह गोलाकार त्रुटियों के साथ सिरदर्द को बहुत कम कर देगा। आप ऐसा करते हैं तो इसके बाद के संस्करण कोड स्निपेट हो जाता है (यह मानते हुए मुद्रा एक NSDecimalNumber* है):

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

सटीक मूल्यों (विशेष रूप से मुद्रा) के लिए कभी भी फ़्लोट का उपयोग न करें! NSDecimalNumber/NSDecimal का प्रयोग करें। –

+0

बहुत बढ़िया!मैंने यह काम किया था लेकिन डबल दशमलव के साथ संघर्ष कर रहा था .. यह इतना स्पष्ट था कि मैंने इसे याद किया। धन्यवाद! –

+0

आपका बहुत स्वागत है! – idz

12

मैं इस कोड का उपयोग करें। मुझे

1) के लिए यह काम फ़ाइल

2 शीर्षक के लिए) यह कोड जोड़ें UITextField प्रतिनिधि जोड़ें (एआरसी सक्षम)

- (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

सटीक मानों (विशेष रूप से मुद्रा) के लिए कभी भी फ़्लोट का उपयोग न करें! NSDecimalNumber/NSDecimal का प्रयोग करें। –

+0

बहुत अच्छा काम करता है! – RyanG

3

निम्नलिखित कोड का उपयोग और इसे अपने सभी मुद्दों को हल करेंगे ...

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

यही वह है जिसे मैंने NSDecimalNumbers का उपयोग करके एएवी उत्तर पुनः प्राप्त किया है।

- (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

तेज 2.0 संस्करण:

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

वह सब स्विफ्ट नहीं है ... – 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! 
} 

नोट: - एक मुद्रा कोड एक तीन अक्षर कोड है कि है, ज्यादातर मामलों में, एक देश के दो चरित्र इंटरनेट देश से बना है कोड प्लस मुद्रा इकाई को इंगित करने के लिए एक अतिरिक्त वर्ण। उदाहरण के लिए, ऑस्ट्रेलियाई डॉलर के लिए मुद्रा कोड "AUD" है।

1

स्विफ्ट के लिए (एएवी के कोड से रेफरी) कोड

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 
} 

टिप्पणी का परीक्षण किया: क्या आप नीचे के रूप में खाली करने के लिए CURRENCYSYMBOL उपयोग कर सकते हैं इनपुट से डिफ़ॉल्ट मुद्रा प्रतीक को निकालना चाहते हैं

currencyFormatter.currencyCode = nil 
currencyFormatter.currencySymbol = "" 

हैप्पी कोडिंग!