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

时间:2009-01-28 16:38:57

标签: objective-c cocoa math nsdecimalnumber

我无法想象如何获得积分&来自NSDecimalnumber的十进制值。

例如,如果我有10,5,那么10& 5?

如果我有10& 5,怎么回到10,5?


嗯,好吧,那看起来更好!

但是我担心丢失小数。

这适用于国际化应用。例如,如果用户设置价格“124,2356”,我想加载&保存确切的数字。


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

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

4 个答案:

答案 0 :(得分: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];

这将分别在dollarscents变量中给出10和0.5。如果您想要整数,可以使用此方法将cents乘以10的幂。

cents = [cents decimalNumberByMultiplyingByPowerOf10: 2];

这将使您cents乘以100,在dollarscents中为您提供10和5。你也应该知道你可以在这里使用10的负幂来划分。

所以,

cents = [cents decimalNumberByMultiplyingByPowerOf10: -2];

会撤消最后一个方法。

答案 1 :(得分:0)

不确定数学函数的目标c有什么,但

Math.floor(10.5) = 10
(10.5 - 10) * 10 = 5

一个更清晰的例子(10的cos)

Math.floor(20.4) = 20
(20.4 - 20) * 10 = 4;

另一个问题

(5 / 10) = .5
10 + .5 = 10.5

小数点上使用的10取决于小数位数...例如

Math.floor(20.44) = 20
(20.44 - 20) * 100 = 44;

要求您按100次

答案 2 :(得分:0)

如果您无法访问数学fns,这可能有效:

double val = [dn doubleValue]; // dn is a NSDecimalNumber*
int intPart = (int) val;
double doublePart = (val - intPart); 

这可能会给你一些麻烦,循环可能永远不会终止,在这种情况下你必须在那里放一个计数器:

while (doublePart != (int)doublePart) doublePart*=10;

答案 3 :(得分:-1)

double floor (double x);是一个POSIX函数。此函数可用于查找不大于x的最高整数值。

double x = 10.5;

double y = floor (x);
// y = 10.0

double z = x - y;
// z = 0.5