2010-09-21 135 views
0

我需要將NSString轉換爲double。如果這個字符串本質上是整數,那麼結果是OK。如果字符串是小數,也許還有組分隔符,那麼結果是錯誤的。任何分隔符的國王(不管是「。」還是「,」)whis在字符串中首先被用作小數分隔符。NSString的方法doubleValue給出了意想不到的結果

我試圖用NSScanner做一些事情,但我根本不明白如何解決這個問題。

想法如下:無論我放在文本字段整數,或小數有或沒有組分隔符,我想獲得正確的十進制數。

我會非常高興得到任何幫助。

提前致謝!

+1

還發布了一些代碼,從你迄今爲止的嘗試。 – JeremyP 2010-09-21 16:14:42

回答

6

[string doubleValue]和常規NSScanner總是使用.作爲小數分隔符。本地化NSScanner使用當前語言環境中的小數分隔符。但是他們都不知道關於分組人物的事情,所以他們不合適。

你必須使用NSNumberFormatter來做到這一點。 @Gobra說最好在界面生成器中進行設置。但你也可以做到這一點在這樣的代碼:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle: NSNumberFormatterDecimalStyle]; 
double value = [[formatter numberFromString: string] doubleValue]; 

如果您需要了解羯羊字符串是有效還是無效,你可以檢查是否通過numberFromString:返回NSNumber對象nil你向它發送doubleValue消息之前。

0

既然您提到了文本字段,我假設問題是將某些數值綁定到NSTextField。這裏的正確方法是使用NSValueFormatter,在IB調色板中有一個可定製的數字格式器。只需將其放到文本框中並設置規則即可。

即使該任務與UI無關,仍然可以使用[NSValueTransformer valueTransformerForName:aName]創建轉換並將其轉換爲值。

+0

我假設你談論NSNumberFormatter?我沒有看到你如何將它放到IB的文本框中。 – jv42 2010-09-21 10:26:21

+0

正確,只需將它拖到NSTextField實例上,它應該接受放置。 – Gobra 2010-09-21 15:25:54

相關問題