29

我似乎找不到一个简单的方法来做到这一点。我需要的确切的东西是:

[NSString stringWithFormat:@"%d doodads", n];

其中 n 是一个整数。所以对于 1234 我想要这个字符串(在我的语言环境下):

@"1,234 doodads"

谢谢。

4

5 回答 5

53

对于 10.6 这有效:

NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
NSString *numberString = [numberFormatter stringFromNumber: [NSNumber numberWithInteger: i]];

它可以正确处理本地化。

于 2010-10-16T14:02:02.550 回答
31

我最近发现了这个单行:

[@1234567 descriptionWithLocale:[NSLocale currentLocale]];  // 1,234,567

或者在 Swift 2 中:

1234567.descriptionWithLocale(NSLocale.currentLocale())     // 1,234,567

斯威夫特 3/4:

(1234567 as NSNumber).description(withLocale: Locale.current)

根据问题格式化:

[@(n) descriptionWithLocale:[NSLocale currentLocale]];

没有 Objective-C 文字的格式化:

[[NSNumber numberWithInt:n] descriptionWithLocale:[NSLocale currentLocale]];

这是我问这个问题时正在寻找的解决方案。自 iOS 2.0 和 OS X 10.0 起可用,记录为返回根据提供的语言环境格式化的数字的字符串版本。stringValue甚至记录使用此方法但通过nil.

鉴于这是我的问题并且这最适合我的答案,我很想改变刻度,但这似乎很残酷。更新我改变了勾号,这个答案就是答案

于 2014-11-25T16:27:39.130 回答
26

下面没有解决语言环境,但它是在数字格式化程序上设置千位分隔符的更好方法(在我看来)。

NSNumberFormatter *numberFormat = [[[NSNumberFormatter alloc] init] autorelease];
numberFormat.usesGroupingSeparator = YES;
numberFormat.groupingSeparator = @",";
numberFormat.groupingSize = 3;   
于 2012-02-24T11:35:35.697 回答
2

Todd Ransom 完美地回答了这个问题。

我想补充一下(在单独的评论中,这样我可以展示一些格式很好的代码),如果您打算定期执行此操作,那么值得创建一个 NSString 帮助器类。

因此,为自己创建一个包含以下内容的 NSStringHelper.h:

#import <Foundation/Foundation.h>

@interface NSString (NSStringHelper)

+(NSString*)formatWithThousandSeparator:(NSInteger)number;

@end

..和一个包含以下内容的 NSStringHelper.m 文件:

#import "NSStringHelper.h"

@implementation NSString (NSStringHelper)

+(NSString*)formatWithThousandSeparator:(NSInteger)number
{
    //  Format a number with thousand seperators, eg: "12,345"
    NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
    [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
    NSString *result = [numberFormatter stringFromNumber:[NSNumber numberWithInteger:number]];
    return result;
}

@end

这为您提供了在未来项目中重用此代码的完美方式。

 #import "NSStringHelper.h"

 NSInteger numOfUsers = 12345;
 NSString* strNumberOfUsers = [NSString formatWithThousandSeparator:numOfUsers];

酷,嘿?

再次为重新发布 Todd 的答案道歉(这正是我想要的!),但这是解决问题的好方法,并准备好在您未来的 XCode 项目中使用。

于 2014-05-07T12:02:04.387 回答
0

使用NSNumberFormatter.

于 2009-11-17T21:24:56.850 回答