我在一个简单的TableViewController项目上遇到错误,因为我试图将NSDecimalNumber
对象强制转换为CheckValue.text
标签的文本,作为{{1}的一部分方法。
说实话,我正在尝试这样做,因为我需要在TableCell上显示cellForRowAtIndexPath
的值。任何人都可以帮忙,因为我觉得我在这里接近一颗子弹?
以下是TableViewController.m
中的代码NSDecimalNumber
答案 0 :(得分:0)
NSDecimalNumber
继承自NSNumber
,因此NSNumberFormatter
格式化程序可用于获取所需的字符串表示形式。
以下是一个示例,根据您的需求进行更改:
- (NSString *)formatNumber:(NSDecimalNumber *)number {
NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
[numberFormatter setMinimumFractionDigits:2];
numberFormatter.usesGroupingSeparator = YES;
return [numberFormatter stringFromNumber:number];
}
示例:
number returns 12456.3 12,456.30 12 12.00 12.3456 12.35
我在示例计算器应用程序中使用了它。
如果将formatNumber
方法添加到TableViewController
类:
cell.CheckValue.text = [self formatNumber:_CheckValue[row]];
为了更容易调试(总是一件好事)
NSDecimalNumber *checkValueDecimal = _CheckValue[row];
NSString *checkValueString = [self formatNumber:_ checkValueDecimal];
cell.label.text = numberString;
这样就可以检查每一步,编译器会在发布版本上对其进行优化。
答案 1 :(得分:0)
UIlabel显示类NSString的对象,您作为参数NSDecimalNumber传递,当您设置文本时,检查传入的值包括length(Lenght方法),因为该对象不支持此方法 - 抛出错误。解决方案 - 将NSDecimalNumber转换为NSString。 例如:
cell.CheckValue.text = [_CheckValue[row] stringValue];
答案 2 :(得分:-1)
您可以使用NSDecimalNumber值格式化字符串
cell.CheckValue.text = [NSString stringWithFormat:@"%@",_CheckValue[row]]