对于我来说,最简单的东西在Objective-C中看起来总是那么疯狂,无论如何我需要做一些基本的减法和乘法而且难以接受。
我有:
client.PricingDiscount <-- this is an Integer 16 property on a CoreData NSManagedObject
sku.RetailPrice <-- this is a Decimal property on a CoreData NSManagedObject
我只是想让NSDecimalNumber像这样显示:
NSDecimalNumber *showPrice = sku.RetailPrice * (100 - client.PricingDiscount);
我尝试了很多不同形式的这个,但无法弄清楚我在这里做错了什么。
答案 0 :(得分:10)
标准运算符不能与NSDecimalNumber
NSDecimalNumber *one = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInt:100] decimalValue]];
NSDecimalNumber *factor = [one decimalNumberBySubtracting:[NSDecimalNumber decimalNumberWithDecimal:[client.PricingDiscount decimalValue]]];
NSDecimalNumber *showPrice = [sku.RetailPrice decimalNumerByMultiplying:factor];
答案 1 :(得分:3)
NSDecimalNumber
是数字的对象包装器 - 您将其视为C值。相反,尝试:
float price = [sku.retailPrice floatValue] * (100 - [client.pricingDiscount floatValue]);
NSDecimalNumber *showPrice = [NSDecimalNumber numberWithFloat:price];
令人困惑,但NSNumber
和NSDecimalNumber
是C类型的Objective-C包装器,通常用于存储容器对象,例如NSArray
(或核心数据)。另一方面,NSInteger
和NSDecimal
是C类型(NSInteger
只映射到int
)。
编辑: falconcreek的答案更能避免准确性损失。但是,在使用整数时,通常会使用未装箱的C类型。
答案 2 :(得分:0)
NSDecimalNumber *showPrice = sku.RetailPrice * (100 - client.PricingDiscount);
NSDecimalNumber
是一个班级。你在这里做的是计算一个值,然后将其指定为指向NSDecimalNumber
对象的指针的值。这是坏事。
之前我没有使用NSDecimalNumber
,但是如果你需要那个特定的对象,你想要的是这样的:
NSNumber* number = [NSNumber numberWithFloat:(sku.RetailPrice * (100 - client.PricingDiscount))];
NSDecimal* decimal = [number decimalValue];
NSDecimalNumber* showPrice = [NSDecimalNumber decimalNumberWithDecimal:decimal];