Как представлять деньги в Objective-C / iOS? - PullRequest
19 голосов
/ 06 мая 2009

Я работаю над приложением для 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"?

Ответы [ 2 ]

27 голосов
/ 06 мая 2009

Использовать 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

8 голосов
/ 06 мая 2009

Используйте класс NSDecimalNumber.

...