iOS - 双值运算

标签 ios objective-c cocoa-touch

我写的APP必须要做一些财务计算,基本上都是关于贷方、借方和余额。唯一的问题(到目前为止)是,如果我计算 999999999.99 - 0.00,结果是 1000000000.00。请问,有谁知道为什么会这样吗?这是我的代码:

NSNumber *totalCredits;
NSNumber *totalDebits;
NSNumber *balance;

self.credits = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
totalCredits = [self.credits valueForKeyPath:@"@sum.amount"];
double totalCreditsDouble = [totalCredits doubleValue];
self.creditLabel.text = [NSString stringWithFormat:@"%1.2f", totalCreditsDouble];

self.debits = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
totalDebits = [self.debits valueForKeyPath:@"@sum.amount"];
double totalDebitsDouble = [totalDebits doubleValue];
self.debitLabel.text = [NSString stringWithFormat:@"%1.2f", totalDebitsDouble];

balance = [NSNumber numberWithFloat:([totalCredits floatValue] - [totalDebits floatValue])];
double balanceDouble = [balance doubleValue];
self.balanceLabel.text = [NSString stringWithFormat:@"%1.2f", balanceDouble];

所有数据都存储为 Double。

最佳答案

C 类型 double 通常不太适合财务计算。

Foundation.framework 有一个很好的数据类型:NSDecimalNumber。 NSDecimalNumber 使用十进制表示形式,精度为 36 位。

关于iOS - 双值运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060497/

相关文章:

ios - Apple Mach-O 链接器警告 "Directory Not Found For Option..."

ios - Firebase 与自定义域的动态链接

ios - 使用 WatchKit 和小部件(今天的扩展)保存/删除到 HealthKit?

iOS Storyboard AutoLayout 和添加约束

objective-c - Xcode 在设备上运行之前立即崩溃

ios - Realm iOS : Cannot Convert value of type 'Dogs.Type' to expected argument type 'T.Type'

ios - 无法从我的 for 循环中向 NSmutableArray 添加超过 260 个元素的元素

ios - WKWebView:将 UIImage 插入网页

ios - 无论分辨率如何,获取点的坐标

iphone - 通过 NSRegularExpression 获取 Javascript 函数之间的特定值?