Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 根据区域设置将带有千个分隔符的数字格式化为NSString的最简单方法_Cocoa_String Formatting - Fatal编程技术网

Cocoa 根据区域设置将带有千个分隔符的数字格式化为NSString的最简单方法

Cocoa 根据区域设置将带有千个分隔符的数字格式化为NSString的最简单方法,cocoa,string-formatting,Cocoa,String Formatting,我似乎找不到一个简单的方法来做这件事。我需要的正是: [NSString stringWithFormat:@"%d doodads", n]; 其中n是一个int。所以对于1234,我想要这个字符串(在我的语言环境下): 谢谢。对于10.6,请使用。此功能: NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setFormatterBehavior: NSNumber

我似乎找不到一个简单的方法来做这件事。我需要的正是:

[NSString stringWithFormat:@"%d doodads", n];
其中n是一个int。所以对于1234,我想要这个字符串(在我的语言环境下):

谢谢。

对于10.6,请使用。

此功能:

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

而且它可以正确地处理本地化问题。

下面的内容并没有说明语言环境,但在我看来,这是在数字格式化程序上设置千位分隔符的更好方法

NSNumberFormatter *numberFormat = [[[NSNumberFormatter alloc] init] autorelease];
numberFormat.usesGroupingSeparator = YES;
numberFormat.groupingSeparator = @",";
numberFormat.groupingSize = 3;   

托德·兰森完美地回答了这个问题

我只想补充一点(在单独的注释中,这样我就可以展示一些格式良好的代码),如果您计划定期这样做,那么创建一个NSString帮助器类是值得的

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

#import <Foundation/Foundation.h>

@interface NSString (NSStringHelper)

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

@end
#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项目中使用它。

我最近发现了以下一行:

 #import "NSStringHelper.h"

 NSInteger numOfUsers = 12345;
 NSString* strNumberOfUsers = [NSString formatWithThousandSeparator:numOfUsers];
[@1234567 descriptionWithLocale:[NSLocale currentLocale]];  // 1,234,567
或在Swift 2中:

1234567.descriptionWithLocale(NSLocale.currentLocale())     // 1,234,567
Swift 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


鉴于这是我的问题,而且这最符合我的答案,我很想改变一下,但这似乎很残酷。更新我更改了勾号,这个答案就是答案。

所以最简单的方法是
[NSString stringWithFormat:@“%d doodas”,[[NSNumberFormatter alloc]autorelease]stringFromNumber:n]]?Max Howell:通常情况下,您会保留实例变量中的数字格式化程序(您可以创建一个出口将格式化程序保留在nib中),这使得表达式非常简单
[myFormatter stringFromNumber:[NSNumber numberWithInt:n]
。(另外,您通常应该使用
NSInteger
numberWithInteger:
,而不是
int
numberWithInt:
,以利用64位机器上更大的范围。)我无法实现这一点。即使使用SetHasThoundandSeparators:YES也不会改变任何东西-没有1000个分隔符。如果可以,这很好,但这是严格的英语格式,不是机器的默认区域设置。您可以在NSNumberFormatter上设置locale属性,但显式地将分组分隔符设置为逗号。许多地区并非如此。此外,分组大小在所有地区都不是三个。我不是说一起使用它们。我的答案实际上是对其他建议使用setFormatterBehavior和setNumberStyle的答案的回应。我实际上没有回答语言环境部分。+1这应该是选择的答案,因为在选择的答案中没有可用的setFOrmat方法。苹果文档说
NSNumberFormatter
肯定有一个
setFOrmat
方法。我会优先接受这个,但我还没有测试过。不过我相信这样会更好。