【问题标题】:Subtracting Currency - NSNumber减去货币 - NSNumber
【发布时间】:2015-05-15 12:02:02
【问题描述】:

我正在处理需要相互减去的货币价值。我读到 NSNumber 可以很好地处理货币,但是我无法减去两个 NSNumber。有没有更好的处理货币的方法,还是我遗漏了一些小东西?

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
        [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
        NSNumber* number = [numberFormatter  numberFromString:bDict[@"booking_deposit"]];
        if (!number) {
            [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
            number = [numberFormatter  numberFromString:bDict[@"booking_deposit"]];
        }
        NSNumber* number2 = [numberFormatter  numberFromString:bDict[@"booking_total"]];
        if (!number2) {
            [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
            number2 = [numberFormatter  numberFromString:bDict[@"booking_total"]];
        }
        NSLog(@"result %@",number2 - number);//warning here

这是警告:

Arithmetic on pointer to interface 'NSNumber', which is not a constant size for this architecture and platform

【问题讨论】:

  • NSNumber 除了包装原始数字类型以存储在 Objective-C 集合类中之外,什么也不提供。还尝试使用- 减去两个对象表明您不了解对象的工作原理(或者您假设运算符重载)。
  • @trojanfoe 谢谢你将如何处理货币?

标签: ios currency nsnumber


【解决方案1】:

您需要获取存储在 NSNumber 中的值的类型以执行算术运算。

NSLog(@"result = %f", [number2 doubleValue] - [number doubleValue])

【讨论】:

    【解决方案2】:

    你不能减去对象,这就是你得到错误的原因。

    您可以使用NSDecimalNumber 代替NSNumber,然后您就有了decimalNumberBySubtracting: 的API。

    或者,使用double

    重点是使用允许您感兴趣的精度级别的数据类型,这通常与您要进行的计算的数量和类型有关。

    NSNumberFormatter 确实提供了generatesDecimalNumbers(它曾经有一个错误,不确定是否仍然存在,值得调查)。

    【讨论】:

    • '你不能减去对象,这就是你得到错误的原因。'脑放屁时刻。谢谢我检查一下
    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2012-01-22
    • 2014-08-01
    • 2015-10-24
    相关资源
    最近更新 更多