Ios 需要创建一个小数位为2的NSDecimalNumber以存储在核心数据中,但最后一个小数位(0)正在被截断

Ios 需要创建一个小数位为2的NSDecimalNumber以存储在核心数据中,但最后一个小数位(0)正在被截断,ios,objective-c,core-data,nsdecimalnumber,Ios,Objective C,Core Data,Nsdecimalnumber,我试图创建一个NSDecimalNumber,以基于包含值11.90的字符串在核心数据中存储货币值。我想保留2位小数,但0被忽略,它总是变为11.9位小数。我尝试使用行为协议取整并添加量表,但对我来说不起作用 它是否按设计工作,在从核心数据检索11.9时是否应该使用格式化程序添加0,或者是否缺少任何步骤 谢谢 NSDecimalNumberHandler *behavior = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NS

我试图创建一个NSDecimalNumber,以基于包含值11.90的字符串在核心数据中存储货币值。我想保留2位小数,但0被忽略,它总是变为11.9位小数。我尝试使用行为协议取整并添加量表,但对我来说不起作用

它是否按设计工作,在从核心数据检索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

我想你的应用程序在突尼斯、约旦、利比亚、科威特、巴林和阿曼没有多少客户。它们都有1/1000的货币^^嗯,我本可以把这个细节包括进去,但我认为它与说明解决方案的要点(使用整数)无关。例如,在汉语中,每一个十进制货币单位都有一个单词。很明显你只拿了最小的一个。