【问题标题】:Swift - Multiply two NSDecimal NumbersSwift - 将两个 NSDecimal 数字相乘
【发布时间】:2014-10-28 16:57:08
【问题描述】:

我目前正在尝试将两个 NSDecimal 数字相乘,这在 Swift 中是否可行?

我在 Apple Dev 页面上找到了方法“decimalNumberByMultiplyingBy”,但我已按如下方式使用它,但收到“Bad access”错误。

Purchase Price 和 Quantity 在 Item 类中都是 NSDecimalNumbers 并且肯定是填充的(购买价格为 35.99,数量为 30)

var one = item.purchasePrice
var two = item.quantity

let three: NSDecimalNumber = one.decimalNumberByMultiplyingBy(two)

我尝试了多种方法,但所有教程似乎都是针对 Objective C 的。

谢谢。

【问题讨论】:

    标签: swift multiplication nsdecimalnumber


    【解决方案1】:

    效果很好。

    var numberOne: NSDecimalNumber = NSDecimalNumber(float: 35.99)
    var numberTwo: NSDecimalNumber = NSDecimalNumber(int: 30)
    let numberThree: NSDecimalNumber = numberOne.decimalNumberByMultiplyingBy(numberTwo)
    
    print(numberThree)
    

    控制台的输出是:

    1079.7000503540041728
    

    注意:您的 var 类型 (three) 可能不是 NSDecimalNumber 实例,这就是您遇到异常的原因。

    【讨论】:

    • 感谢您让我知道我没有发疯!原来我的异常正在发生,因为我更改了“item.quantity”的变量类型。但没有更新核心数据 - DUH。感谢您提醒我检查所有类型是否正确@holex
    【解决方案2】:

    我不相信 NSDecimalNumber 类的完整性。看看下面的代码:

    在操场上输入以下内容:

    var number1: NSDecimalNumber = NSDecimalNumber(float: 35.99)

    你得到:35.​​99000167846681

    var number2: NSDecimalNumber = NSDecimalNumber(string: "35.99")

    你得到:35.​​98999999999999

    var number3: NSDecimalNumber = NSDecimalNumber(int: 3599)

    你得到:3599

    var number4: NSDecimalNumber = NSDecimalNumber(int: 100)

    你得到:100

    let number5: NSDecimalNumber = number3.decimalNumberByDividingBy(number4)

    你得到:35.​​98999999999999

    仔细查看 number2 和 number5 如果这是一个真正的 Decimal 类,它们应该有精确的表示。

    【讨论】:

    • 你确定吗?我刚刚在操场上登记了。 print(number1) 完全没有问题。也许您在打印之前要转换成双倍?
    【解决方案3】:

    对于 Swift 5

    var amount:Double = 1.66
    
    var nsValue: NSDecimalNumber = NSDecimalNumber(string: String(amount))
    
    var nsValue1: NSDecimalNumber = NSDecimalNumber(string: "1.22")
    
    
    var nsValue3: NSDecimalNumber = nsValue.multiplying(by: nsValue1)
    
    print(nsValue3)
    

    输出

    2.0252
    

    我知道回答太晚了,但有人可能会觉得它有帮助。

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多