7

我不知道如何从 NSDecimalnumber 中获取整数和十进制值。

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

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


嗯,好的,看起来更好!

但是,我担心丢失小数。

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


嗯,好吧,就是这样,但不尊重小数位数。如果存在一种从我设置的当前本地知道的方法。

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

4

4 回答 4

20

我使用 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。如果你想要整数,你可以使用这个方法将你乘以cents10 的幂。

cents = [cents decimalNumberByMultiplyingByPowerOf10: 2];

这反过来将你乘以cents100,得到 10 和 5 indollarscents。您还应该知道,您可以在这里使用 10 的负幂进行除法。

所以,

cents = [cents decimalNumberByMultiplyingByPowerOf10: -2];

将撤消最后一种方法。

于 2009-01-29T14:39:50.323 回答
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

于 2009-01-28T17:01:28.623 回答
0

如果您无权访问数学 fns,这可能会起作用:

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

这可能会给您带来一些麻烦,循环可能永远不会终止,在这种情况下,您将不得不在其中放置一个计数器:

while (doublePart != (int)doublePart) doublePart*=10;
于 2009-01-28T19:05:37.203 回答
-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
于 2009-01-28T21:15:26.597 回答