gpt4 book ai didi

macos - 将什么区域设置参数传递给 NSDecimalNumber +decimalNumberWithString :locale: so it always works with NSString's using the dot (. ) 小数点?

转载 作者:行者123 更新时间:2023-12-03 16:07:34 28 4
gpt4 key购买 nike

我有一个 NSString,我想将其转换为 NSDecimalNumber。该字符串是从服务器接收的,并且始终使用 en_US 语言环境进行格式化,例如 XXX.YYY 而不是 XXX,YYY。我想创建一个接受 XXX.YYYNSDecimalNumber ,无论用户的区域设置如何。该数字永远不会向用户显示,它用于进行内部数学计算。

通常你会做这样的事情:

NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234"];

但是,如果用户运行的是 Mac OS X 的 fr_FR 语言环境,则会出现问题。 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];

这是最好的方法吗?安全吗? @"en_US" 本地标识符在 Mac OS X 的所有国际版本上都可用,还是在某些情况下可能返回 nil NSLocale?

<小时/>

更新 1:这看起来效果很好,而且更明确:

NSDictionary    *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];

NSLocaleDecimalSeparator 是为 NSLocale 定义的常量,它响应 -objectWithKey:,就像 NSDictionary 一样。您可以为其提供任何您想要的小数点分隔符,例如 @","

我认为这可能是这个问题的最佳答案,除非其他人有更好的主意?

最佳答案

这看起来效果很好,而且更明确:

NSDictionary    *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];

NSLocaleDecimalSeparator 是为 NSLocale 定义的常量,它响应 -objectWithKey:,就像 NSDictionary 一样。您可以为其提供任何您想要的小数点分隔符,例如 @","

我认为这可能是这个问题的最佳答案,除非其他人有更好的主意?

关于macos - 将什么区域设置参数传递给 NSDecimalNumber +decimalNumberWithString :locale: so it always works with NSString's using the dot (. ) 小数点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7879361/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com