在 Cell 的 UILabel 中显示 NSDecimalNumber

Display NSDecimalNumber in Cell's UILabel

我正在尝试在我的 TableView 单元格上的 UILabel 中显示 NSDecimalNumber(我正在从 BuyProductVariant 获取价格)。我似乎无法正确获取代码。我收到的警告是:

"Incompatible Pointer Types Assigning to NSString from NSDecimalNumber".

我认为这只是意味着我不能分配 NSDecimalNumber 因为它应该是一个字符串。所以我将其更改为 NSString,但我仍然收到警告。下面的代码应该是什么样的?

.h

@property (nonatomic, readonly, strong) NSDecimalNumber *price;

.m

BUYProductVariant *productPrice = price[indexPath.row];
cell.priceLabel.text = productPrice.price;

UILabel 期望它的文本值是一个 NSString,因此您需要使用 product.price.

的值创建一个字符串
cell.priceLabel.text = [NSString stringWithFormat:@"%@", product.price];

重要的是您不能简单地转换(更改)NSDecimalNumber 的类型,您必须以某种方式转换值。

最简单的方法是询问它 description:

cell.priceLabel.text = productPrice.price.description;

(所有建议使用 "%@" 格式化的答案都是间接使用 description。)

但如果是价格,您可能希望将其格式化为价格。例如,在美国,美元价格的格式通常为小数点右侧两位数和小数点左侧每组三位数字前的逗号。所以不要使用 description,你应该添加一个 NSNumberFormatter 到你的控制器并使用它:

.m

@interface ViewController ()
@property (nonatomic, strong) NSNumberFormatter *priceFormatter;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.priceFormatter = [[NSNumberFormatter alloc] init];
    self.priceFormatter.numberStyle = NSNumberFormatterCurrencyStyle;
    // If you don't want a currency symbol like $ in the output, do this:
    // self.priceFormatter.currencySymbol = nil;
}

- (void)showPrice:(NSDecimalNumber *)price inTextField:(UILabel *)label {
    label.text = [self.priceFormatter stringFromNumber:price];
}

您可以使用许多其他 NSNumberFormatter 属性来调整输出,因此如果需要,请检查 class reference

更新

假设 price 声明为 NSArray:

BUYProductVariant *productPrice = price[indexPath.row];
cell.priceLabel.test = [self.formatter stringWithNumber:productPrice.price];