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