Как представить деньги в Objective-C/iOS?
Я работаю над iPhone-приложением и хочу представлять суммы денег ($). Я не могу использовать float, потому что они вводят определенное количество ошибок округления.
Что я могу использовать?
Я собираюсь определить свой собственный класс Money и хранить доллары и пенни как NSInteger внутри.
@interface Money : NSObject {
//$10.25 is stored as dollas=10 and pennies=25
NSInteger dollars;
NSInteger pennies;
}
Другим возможным представлением (проще для добавления и умножения) было бы использование одного NSInteger в виде пенни.
@interface Money : NSObject {
//$10.25 is stored as pennies=1025
NSInteger pennies;
}
Каковы ваши мысли? Есть ли тип "BigDecimal", который я могу использовать?
Ответы
Ответ 1
Использовать NSDecimalNumber. Конечно, у этого есть накладные расходы, но если вы не сможете доказать эту проблему, вам понравится то, что она вам дает.
http://www.cimgf.com/2008/04/23/cocoa-tutorial-dont-be-lazy-with-nsdecimalnumber-like-me/
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDecimalNumber_Class/Reference/Reference.html
Ответ 2
Используйте класс NSDecimalNumber
.