我不知道如何从 NSDecimalnumber 中获取整数和十进制值。
例如,如果我有 10,5,如何得到 10 和 5?
如果我有 10 和 5,如何返回 10,5?
嗯,好的,看起来更好!
但是,我担心丢失小数。
这是一个国际化的应用程序。例如,如果用户设置价格“124,2356”,我想加载并保存确切的数字。
嗯,好吧,就是这样,但不尊重小数位数。如果存在一种从我设置的当前本地知道的方法。
这是因为它代表货币价值......
我不知道如何从 NSDecimalnumber 中获取整数和十进制值。
例如,如果我有 10,5,如何得到 10 和 5?
如果我有 10 和 5,如何返回 10,5?
嗯,好的,看起来更好!
但是,我担心丢失小数。
这是一个国际化的应用程序。例如,如果用户设置价格“124,2356”,我想加载并保存确切的数字。
嗯,好吧,就是这样,但不尊重小数位数。如果存在一种从我设置的当前本地知道的方法。
这是因为它代表货币价值......
我使用 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];
这将分别在dollars
和cents
变量中为您提供 10 和 0.5。如果你想要整数,你可以使用这个方法将你乘以cents
10 的幂。
cents = [cents decimalNumberByMultiplyingByPowerOf10: 2];
这反过来将你乘以cents
100,得到 10 和 5 indollars
和cents
。您还应该知道,您可以在这里使用 10 的负幂进行除法。
所以,
cents = [cents decimalNumberByMultiplyingByPowerOf10: -2];
将撤消最后一种方法。
不确定目标 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
如果您无权访问数学 fns,这可能会起作用:
double val = [dn doubleValue]; // dn is a NSDecimalNumber*
int intPart = (int) val;
double doublePart = (val - intPart);
这可能会给您带来一些麻烦,循环可能永远不会终止,在这种情况下,您将不得不在其中放置一个计数器:
while (doublePart != (int)doublePart) doublePart*=10;
double floor (double x);
是一个 POSIX 函数。此函数可用于查找不大于 的最大整数值x
。
double x = 10.5;
double y = floor (x);
// y = 10.0
double z = x - y;
// z = 0.5