我遇到了麻烦
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString locale:(NSDictionary *)locale
因为我想以编程方式提供非常高的精度值,以便最初没有浮点错误,所以apple给了我唯一依赖于不稳定语言环境的选项。
所以文档说得非常加密:
参数:...... 现场 一本字典 定义语言环境(具体而言 NSDecimalSeparator)用来 解释numericString中的数字。
讨论 locale参数确定NSDecimalSeparator是否为 期间(例如,用于 美国)或逗号(按原样) 例如,在法国使用。)
好吧,在文档中搜索NSDecimalSeparator后,没有找到任何内容。在网上搜索,发现这个东西是“弃用的”。所以目前我做了一件危险的事情:
NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSDecimalNumber *num = [NSDecimalNumber decimalNumberWithString:str locale:usLoc];
所以我想知道:如果他们真的需要这个不稳定的语言环境来做这样的事情(我以编程方式添加字符串,没有用户输入),我不能以某种方式创建自己的语言环境?那个参数想要一个NSDictionary,所以想法:
我可以从-initWithLocaleIdentifier:@“en_US”的区域设置字典中创建一个NSMutableDictionary,然后只编辑这个%?&§! NSDecimalSeparator字段?
另一件引起我头痛的事:为什么参数要求NSDictionary,我必须传递一个NSLocale对象?或者我的代码错了? (未经测试,因为我的应用程序目前完全搞砸了;-))
答案 0 :(得分:5)
似乎没有办法在NSLocale
的实例中添加/修改值;您只能获取用户(currentLocale
和autoupdatingCurrentLocale
)的逻辑区域设置,系统区域设置,而不会由用户在其系统首选项(systemLocale
)或任何其他命名中进行任何更改系统知道的语言环境(initWithLocaleIdentifier
)。
NSLocale
响应objectForKey:
消息,该消息与NSDictionary
使用的消息相同;这就是为什么你可以使用NSLocale
,即使该方法需要NSDictionary
。由于NSDecimalNumber
可能只会查看一个值NSDecimalSeparator
,因此我觉得您可以通过使用该密钥创建NSDictionary
对象并将其作为{{1参数,但这可能会在将来中断,因为locale
需要一个完整的NSDecimalNumber
实例,并且可能会更改为检查其他键。
您是以编程方式创建这些字符串,对吗?因此,您可以控制使用的十进制分隔符。我的建议是使用NSLocale
,并获取en_US语言环境:
.
每次小数点分隔符都是NSLocale *us = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
。