需要创建一个带有 2 个小数位的 NSDecimalNumber 以存储在核心数据中,但最后一个小数点 (0) 被删除
Need to create a NSDecimalNumber with 2 decimal places to store in Core Data but last decimal (0) is being cut
我正在尝试创建一个 NSDecimalNumber 以基于包含值 11.90 的字符串在核心数据中存储货币值。我想保留 2 位小数,但 0 被忽略,它总是变成 11.9 作为 NSDecimalNumber。我尝试使用行为协议舍入并添加比例,但它对我不起作用。
它是否按设计工作,我应该在从 Core Data 检索 11.9 时只使用格式化程序添加 0 还是我遗漏了任何步骤?
谢谢。
NSDecimalNumberHandler *behavior = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
[NSDecimalNumber setDefaultBehavior:behavior];
NSDecimalNumber *priceDecimal;
NSDictionary *locale = [NSDictionary dictionaryWithObject:currentLocaleSeparator forKey:NSLocaleDecimalSeparator];
priceDecimal = [NSDecimalNumber decimalNumberWithString:price locale:locale];
priceDecimal = [priceDecimal decimalNumberByRoundingAccordingToBehavior:behavior];
对,格式化程序是正确的做法。您必须区分存储的十进制数的精度(这似乎工作正常)及其表示或格式。
我用货币制作了很多应用程序 - 我总是发现使用 64 位整数简单地计算美分(或百单位)更容易和方便。
查看 NSNumberFormatter
的 minimumFractionDigits
。
我正在尝试创建一个 NSDecimalNumber 以基于包含值 11.90 的字符串在核心数据中存储货币值。我想保留 2 位小数,但 0 被忽略,它总是变成 11.9 作为 NSDecimalNumber。我尝试使用行为协议舍入并添加比例,但它对我不起作用。
它是否按设计工作,我应该在从 Core Data 检索 11.9 时只使用格式化程序添加 0 还是我遗漏了任何步骤?
谢谢。
NSDecimalNumberHandler *behavior = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
[NSDecimalNumber setDefaultBehavior:behavior];
NSDecimalNumber *priceDecimal;
NSDictionary *locale = [NSDictionary dictionaryWithObject:currentLocaleSeparator forKey:NSLocaleDecimalSeparator];
priceDecimal = [NSDecimalNumber decimalNumberWithString:price locale:locale];
priceDecimal = [priceDecimal decimalNumberByRoundingAccordingToBehavior:behavior];
对,格式化程序是正确的做法。您必须区分存储的十进制数的精度(这似乎工作正常)及其表示或格式。
我用货币制作了很多应用程序 - 我总是发现使用 64 位整数简单地计算美分(或百单位)更容易和方便。
查看 NSNumberFormatter
的 minimumFractionDigits
。