如何在十进制和整数之间拆分NSDecimalnumber

mam*_*mcx 7 math cocoa objective-c nsdecimalnumber

我无法想象如何从NSDecimalnumber获取积分和十进制值.

例如,如果我有10,5,如何得到10和5?

如果我有10和5,如何回到10,5?


嗯好的,那看起来更好!

但是我有关于丢失小数的担心.

这是一个国际化的应用程序.例如,如果用户设置价格"124,2356",我想加载并保存确切的数字.


嗯,这是方法,但不尊重小数位数.如果有一种方法可以从我当前设置的本地知道.

这是因为代表货币价值......

Ash*_*ark 19

我使用2作为比例,因为你说这是货币,但你可以选择使用另一个舍入比例.我也忽略了舍入可能带来的任何异常,因为这是一个非常简单的例子.

NSDecimalNumberHandler *behavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:0 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
NSDecimalNumber *price = /* eg. 10.5 */;
NSDecimalNumber *dollars = [price decimalNumberByRoundingAccordingToBehavior: behavior];
NSDecimalNumber *cents = [price decimalNumberBySubtracting: dollars];
Run Code Online (Sandbox Code Playgroud)

这将分别给出10和0.5 in dollarscents变量.如果你想要整数,你可以使用这个方法乘以cents10的幂.

cents = [cents decimalNumberByMultiplyingByPowerOf10: 2];
Run Code Online (Sandbox Code Playgroud)

这将反过来乘以cents100,给你10和5 in dollarscents.你也应该知道你可以使用10的负幂来划分.

所以,

cents = [cents decimalNumberByMultiplyingByPowerOf10: -2];
Run Code Online (Sandbox Code Playgroud)

会撤消最后一种方法.

  • 规模不应该是0吗?使用2的等级,10.5的价格将给出10.5的美元.从价格中减去该值将给出0美分 (3认同)