2011-07-11 214 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];