2011-07-11 131 views
8

我希望用戶能夠在我的應用程序中輸入金額超過0的值。所以0,0或0的任何表示將是不可接受的,但是例如0,1將被接受。獲取NSString的floatvalue時用逗號替換逗號

爲了做到這一點,我打算獲取NSString的float值並將其與0.0進行比較,但這不起作用,因爲我們的十進制數字需要用逗號分隔,總是(由於業務需求)。如果逗號是點號,那麼比較就可以完成這項工作。

在我的文本文本中用點代替逗號最體面的方式是什麼?

PS:用戶限於只輸入數字和逗號,小數部分。 而實際上我在想,如果這是STHG可與數字格式化左右做...提前

THX

回答

19

你可以只使用stringByReplacingOccurrencesOfString

NSString *newString = [ammount stringByReplacingOccurrencesOfString:@"," withString:@"."]; 
+3

這會不會在某些國家工作:http://en.wikipedia.org/wiki/ Decimal_mark#Hindu.E2.80.93Arabic_numeral_system (東方阿拉伯數字) – Daniel

4

可以使用NSString+JavaAPI類別,然後做:

NSString* newString = [myString replace: @"," withString: @"."]; 

當然,這可能無助於如果用戶碰巧進入像1,000,00

+0

用戶僅限於輸入數字和逗號,我現在將其添加到我的問題:) – aslisabanci

+2

+0:雖然這個工程,安裝這個類別的僅使用較短的方法名稱來包裝'stringByReplacingOccurrencesOfString:withString:'就更有效你收益,恕我直言。 – DarkDust

+0

@DarkDust - 夠公平的。每次我必須輸入'stringByReplacingOccurrencesOfString'只是爲了演示一個簡單的字符串替換。但是你是對的,如果你要進行大量的字符串處理操作,這個類別纔有意義。 – aroth

0

Apple建議使用NSScanner。 這是我使用的代碼:

NSScanner *scanner; 
NSLocale *local =[NSLocale currentLocale ]; 
[scanner setLocale:local]; 
float result; 
scanner = [NSScanner localizedScannerWithString:<YOUR NSString>]; 
[scanner scanFloat:&result]; 
+0

我希望這不是你使用的代碼。無論如何,如果您使用的是'localizedScannerWithString:',您並未將'scanner'設置爲任何內容,並且獲取當前的語言環境是多餘的。我也建議使用'double'而不是'float'來避免失去精度。 –

+0

是的你的權利......我錯過了我分享這段代碼的日子;)謝謝 – Fjohn

2

下面是使用NSScanner一種巧妙的方法:

NSScanner *scanner = [NSScanner localizedScannerWithString:theInputString]; 
    float result; 
    [scanner scanFloat:&result];