Dav*_*her 7 macos cocoa nsstring nsdecimalnumber nslocale
我有一个NSString,我想转换成一个NSDecimalNumber
.该字符串是从服务器接收的,并且始终使用en_US
类似于XXX.YYY
或不相似的语言环境进行格式化XXX,YYY
.我想创建一个NSDecimalNumber
接受XXX.YYY
用户无论语言环境如何.该数字永远不会显示给用户,它用于进行内部数学运算.
通常你会做这样的事情:
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234"];
Run Code Online (Sandbox Code Playgroud)
但是,如果用户正在运行fr_FR
Mac OS X 的区域设置,则会中断.en_US
将其解释为一点二三四,其中 - fr_FR
将其解释为一千二百三十四,两者都是非常不同的数字.
显而易见的解决方案是使用+decimalNumberWithString:locale:
.但是我不确定将该locale:
参数作为参数传递给所有国际版本的Mac OS X.我最好的猜测是这样做:
NSLocale *l = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗,安全吗?@"en_US"
是否可以在所有国际版本的Mac OS X上使用本地标识符,或者nil
在某些情况下是否可以返回NSLocale?
更新1:这似乎运作良好,更明确:
NSDictionary *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];
Run Code Online (Sandbox Code Playgroud)
NSLocaleDecimalSeparator
是一个为NSLocale定义的常量,它响应-objectWithKey:
,就像NSDictionary一样.你可以提供你想要的任何小数点分隔符,比如@","
.
我认为这可能是问题的最佳答案,除非其他人有更好的想法?
这似乎运作良好,更明确:
NSDictionary *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];
Run Code Online (Sandbox Code Playgroud)
NSLocaleDecimalSeparator
是一个为NSLocale定义的常量,它响应-objectWithKey:
,就像NSDictionary一样.你可以提供你想要的任何小数点分隔符,比如@","
.
我认为这可能是问题的最佳答案,除非其他人有更好的想法?
归档时间: |
|
查看次数: |
1960 次 |
最近记录: |