在购物车上进行的工作,总计商品的总价。
我有此字符串£4.44存储在核心数据中。
我使用以下代码从字符串中提取数字:
+ (float)totalPriceOfItems:(NSManagedObjectContext *)managedObjectContext
{
NSError *error = nil;
float totalPrice = 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) {
NSString *price = [[[bagItem price] componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
totalPrice = totalPrice + [price floatValue];
NSLog(@"total: %f", totalPrice);
}
return totalPrice;
}
我取回这个值444.000000
当我的意图是回到4.44时
我很明显在这里遗漏了一些东西,也许将每个项目的价格存储为整数会更好,但是现在我想使事情以这种方式工作。
谢谢你的时间
最佳答案
问题可能出在您的解析代码上
[[[bagItem price] componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""]
您要做的是将不是数字的每个字符上的字符串分开,然后将其放回原处。因此,将字符串4.44拆分为小数点,然后放回到444处。我的建议是以不需使用任何解析代码的方式存储价格的方式-应该将其存储如4.44。
现在到下一个问题-浮动。浮动和双打在财务应用方面没有您需要的精度。在某个时候,您要将10.99和0.01加在一起,发现答案不是11.0而是11.000000000001或类似的东西。对于这些类型的情况,您应该将数字存储为NSDecimalNumber,并使用该类提供的函数进行计算。
您可以将字符串转换为NSDecimalNumber,如下所示:
[NSDecimalNumber decimalNumberWithString:@"44.50"];
通过使用NSDecimal数字,这也使您可以使用NSNumberFormatter将数字格式化为货币(如果要显示它)
[NSNumberFormatter localizedStringFromNumber:number numberStyle:NSNumberFormatterCurrencyStyle];
关于ios - 从NSString对象返回的浮点值不是我期望的值,如何正确从NSString中提取浮点值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24598337/