Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Iphone 如何将带有数字的字符串转换为带有逗号而不是小数点的NSDecimalNumber?_Iphone_Objective C_Nsnumber_Nsnumberformatter - Fatal编程技术网

Iphone 如何将带有数字的字符串转换为带有逗号而不是小数点的NSDecimalNumber?

Iphone 如何将带有数字的字符串转换为带有逗号而不是小数点的NSDecimalNumber?,iphone,objective-c,nsnumber,nsnumberformatter,Iphone,Objective C,Nsnumber,Nsnumberformatter,我有一个界面,上面有0000000012345,78这样的数字 所以我想出了如何把它们变成数字。但我需要用这个数字来计算,我真正需要的是一个十进制数字 NSNumberFormatter *fmtn = [[NSNumberFormatter alloc] init]; [fmtn setFormatterBehavior:NSNumberFormatterBehavior10_4]; [fmtn setNumberStyle:NSNumberFormatterDecimalStyle]; [f

我有一个界面,上面有0000000012345,78这样的数字

所以我想出了如何把它们变成数字。但我需要用这个数字来计算,我真正需要的是一个十进制数字

NSNumberFormatter *fmtn = [[NSNumberFormatter alloc] init];
[fmtn setFormatterBehavior:NSNumberFormatterBehavior10_4];
[fmtn setNumberStyle:NSNumberFormatterDecimalStyle];
[fmtn setDecimalSeparator:@","];
NSNumber *test = [fmtn numberFromString:@"0000000012345,78"];
如何将我的NSNumber设置为NSDecimalNumber

编辑:这是我最后得到的代码:

NSDictionary *localeDict = [NSDictionary dictionaryWithObject:@"," forKey:@"NSDecimalSeparator"];
NSDecimalNumber *test = [[NSDecimalNumber alloc] initWithString:@"00000000012345,78" locale:localeDict];
如何组合语言环境词典不能被描述为“有很好的文档”,我花了一些时间在谷歌上找到了一个例子

这一点也起了作用:

NSLocale *deLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"de"];
NSDecimalNumber *testd = [NSDecimalNumber decimalNumberWithString:@"00000000012345,78" locale:deLoc];
不过,要注意区域设置;如果您在区域格式未设置为法语的iPhone上运行该代码,它可能不会返回您期望的结果。因此,您可能需要使用:

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString locale:(NSDictionary *)locale
相反。

如果您查看,您将看到您可以从
NSString
s(带或不带区域设置)、实际数字等创建新的
NSDecimalNumber
s

如果要将
NSNumber
转换为
NSDecimalNumber
,可以执行以下操作:

NSDictionary *locale = ...;
NSNumber *number = ...;
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:[number descriptionWithLocale:locale] locale:locale];

当然,您必须正确地创建区域设置等等,但这是留给您的一个练习(检查、和可能很方便)。

要将
NSNumber
转换为
NSDecimalNumber
,使用此代码完全避免字符表示不是更有意义吗

NSNumber* source = ...;

NSDecimalNumber* result = [NSDecimalNumber decimalNumberWithDecimal:[source decimalValue]]; 

在我的脑海中,
[NSDecimalNumber numberFromString:@“123.123”]
或者类似的东西。请您更改您给出的“正确”状态的答案好吗?标题中问题的正确答案应该与字符串无关。关键是接口确实明确地给了我一个逗号(,),这就是我设置硬编码setDecimalSeparator:@“,”的原因。iPhone应用程序的目标区域是小数点分隔符为“.”的区域,因此我必须确保它也能正常工作。但你的例子确实让我有了一个想法。我可以将地区设置为法国(硬编码),然后它将始终工作。谢谢,谢谢你的回答。正如在另一个回复中所评论的,问题是我总是有一个“,”因为这是我从接口得到的。但是我可以硬编码一个使用“,”的语言环境。谢谢你的回答。我不想批评我自己的答案,但它确实没有抓住原始问题的重点,不应该得到如此高的评价,甚至不应该成为公认的答案。最初的问题是:给定一个包含逗号-小数分隔符的字符串(该分隔符来自某个用户无法控制的接口),如何转换为NSDecimalNumber。
NSNumber* source = ...;

NSDecimalNumber* result = [NSDecimalNumber decimalNumberWithDecimal:[source decimalValue]];