【问题标题】:I'm using NSDecimalNumber in a method that works out a total price and sometimes it returns only one number after decimal when two are intended我在一个计算总价的方法中使用 NSDecimalNumber,有时它只返回一个小数点后的一个数字,当两个数字
【发布时间】:2014-08-11 10:43:53
【问题描述】:

我有一个方法循环遍历我的核心数据获取对象数组,并使用每件商品的价格和数量来计算总价。它似乎大部分时间都在返回,例如23.44, 3.65 但我注意到有时它会返回例如 63.1 如下所示。

这是我的方法:

+ (NSDecimalNumber *)totalPriceOfItems:(NSManagedObjectContext *)managedObjectContext
{
    NSError *error = nil;
    NSDecimalNumber *totalPrice = [[NSDecimalNumber alloc] initWithInt:0];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"BagItem"];

    // Get fetched objects and store in NSArray
    NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

    for (BagItem *bagItem in fetchedObjects) {
        NSDecimalNumber *price = [[NSDecimalNumber alloc] initWithDecimal:[[bagItem price] decimalValue]];
        NSDecimalNumber *quantity = [[NSDecimalNumber alloc] initWithInt:[[bagItem quantity] intValue] + 1];

      NSDecimalNumber *priceFromQuantity = [price decimalNumberByMultiplyingBy:quantity];

      totalPrice = [totalPrice decimalNumberByAdding:priceFromQuantity];
      NSLog(@"total: %@", totalPrice);
    }

    return totalPrice;
}

我在这里做错了吗?

没有太多使用 NSDecimalNumber 的经验,但希望有人能帮我解决这个问题。

感谢您的宝贵时间。

【问题讨论】:

    标签: objective-c cocoa-touch core-data nsnumber nsdecimalnumber


    【解决方案1】:

    这不是 NSDecimalNumber 问题。相反,问题在于您正在使用的 NSNumberFormatter。将其配置为使用 minimumFractionDigits = 2。

    【讨论】:

    • 如果您没有使用 NSNumberFormatter,根据接受的答案,那么您应该考虑这样做。它可以帮助您以区域感知方式显示金额/货币等。
    • 我下次会这样做,但现在这个快速修复有效。这意味着我不必绕过我的应用程序来改变事情。不过,我下次会记住这一点。谢谢
    【解决方案2】:

    您可以在 字符串格式说明符 的帮助下轻松实现,例如:

    NSLog(@"total: %.2f", [totalPrice floatValue]);
    

    或

    [NSString stringWithFormat:@"%.2f", [totalPrice floatValue]]
    

    %.2f 仅表示“.”后两位小数

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多