格式化NSDecimalNumber问题

时间:2012-11-24 11:21:28

标签: iphone formatting fractions nsdecimalnumber

我正在尝试使用简单的格式创建NSDecimalNumber:123.00后面有两个小数位,总是。我尝试使用NSFormatter和许多其他方法,如从字符串转换浮动,然后从此字符串创建NSDecimalNumber,但它不起作用。 问题是我只需要这种格式的NSDecimalNumber,而不是NSString或任何其他格式。 谢谢你的建议, 保罗

4 个答案:

答案 0 :(得分:0)

你可以从中得到这个想法。

float num = 123.1254546;
NSString *str = [NSString stringWithFormat:@"%.2f",num];
NSLog(@"%.2f %@",num,str);

答案 1 :(得分:0)

我认为您只需要进行两次类型转换操作,如下所示

   float value = 123.562;
   int myDigit = value;

它在myDigit变量中给出值123

 NSLog(@"MyDigit in Decimal = %d",myDigit);

输出为十进制的MyDigit = 123

现在如果你想输出像123.000那么只需写下来

 float valueWithZiro = myDigit;

 NSLog(@"MyDigit with 000  == %3f",valueWithZiro);

输出为十进制的MyDigit = 123.000

答案 2 :(得分:0)

NSDecimalNumber与NSNumber一样,不能包含格式信息。对象结构根本不支持它。它代表一个数字,而不是数字的显示方式。

您可以将其转换为格式化的NSString(您说您不想要)。但是你不能做你所要求的。

使用NSNumberFormatter将其转换为格式化的NSString。它的对象允许您指定小数和千位分隔符,要显示的小数位数,货币符号等。

答案 3 :(得分:0)

也许你希望存储一个NSNumberDecimal只有两位数后? 如果是这样NSDecimalNumberBehaviors是你的朋友。 我有类似的需求并使用以下内容:

self.decimalHandlingBehaviorForApp = [NSDecimalNumberHandler
                                         decimalNumberHandlerWithRoundingMode:NSRoundUp
                                         scale:2 raiseOnExactness:NO 
                                         raiseOnOverflow:NO raiseOnUnderflow:NO
                                         raiseOnDivideByZero:YES];

编辑:添加了使用它的示例

// update the taxable total first
self.cartTaxableTotal = [self.cartTaxableTotal decimalNumberByAdding:itemAdded.priceOfItem
                                                        withBehavior:self.decimalHandlingBehaviorForApp];