2011-01-28 28 views
5

Sınıf örneği başlatmam için parametre olarak kullanmak istediğim bazı dize değerini döndüren bir ayrıştırıcım var. .hNesne içinde kayan dize

- (id) addCurrencyWithFrom: (NSString *) from_ andTo:(NSString *) to_ andRate:(float *) float_; 
+0

'ama dize float' dönüştürmek olamaz:

fazla bilgi için bu ilgili soruya bakın? – Mahesh

+0

Bir yan not olarak, bir para birimi dönüştürücüsü yapıyorsanız, kontrol etmek isteyebilirsiniz: https://github.com/davedelong/DDUnitConverter IMF'den veri çeken bir para birimi dönüştürücüsü vardır. –

+2

Ayrıca, para ile herhangi bir şey yaparken, gerçekten floatlardan kaçınmak isteyeceğinize dikkat edin. Şamandıralar, nispeten küçük değerleri doğru bir şekilde temsil edemedikleri veya hesaplayama becerilerinde dikkate değerdir. Çiftler önemli ölçüde daha iyi. – bbum

cevap

18

Hayır. Bir NSNumberFormatter kullanın. Bu nedenle, var. -floatValue ve -doubleValue sadece hızlı ve kolay geçici düzeltmelerdir, ancak kötü yollarla başarısız olurlar. Örneğin:

NSLog(@"%f", [@"123" floatValue]); //logs 123.0000 
NSLog(@"%f", [@"abc" floatValue]); //logs 0.0000 
NSLog(@"%f", [@"0" floatValue]); //logs 0.0000 
NSLog(@"%f", [@"42" floatValue]); //logs 42.0000 
NSLog(@"%f", [@"42x" floatValue]); //logs 42.0000 

-floatValue uygun bir sayıda (@"0") ve geçersiz bir (@"abc") arasında ayrım yapamaz.

NSNumberFormatter, aksi halde, ayrıştırılamıyorsa nil ve NSNumber ise verebilir. Aynı zamanda para birimi sembolleri, bölgeye özgü ondalık ve binlerce ayırıcı ve kullanıcının yerel ayarı gibi şeyler alır. -floatValue ve arkadaşları yok. Eğer dize NSString veya C Dizi burada kastediyorsunuz - How to convert an NSString into an NSNumber

+1

Hehe, kafamda dolaştığım başka bir soruya cevap verdin. –

7
float f = [yourStringObject floatValue]; 
yılında

NSString *from = [[NSString alloc] initWithString:@"EUR"]; 
    NSString *to = [[NSString alloc] initWithString:[attributeDict objectForKey:@"currency"]]; 
    NSNumber *rate = [[NSNumber alloc] initWithFloat:[[attributeDict objectForKey:@"rate"] doubleValue]]; 


    currency = [[Currency init] alloc]; 
    [currency addCurrencyWithFrom:from andTo:to andRate:rate]; 

:

İki NSString ve bir şamandıra değerini soran bir yöntemi var ama yüzer dize dönüştürmek olamaz, burada benim kodudur

1

Dene: Ayrıca

double f = [from_ doubleValue]; 
double t = [to_ doubleValue]; 

, bir N geçen Bir float yerine SNumber * size beklediğiniz sonuçları vermez.