为什么减去NSDecimalNumbers不起作用 - Swift 3

时间:2017-09-07 12:22:55

标签: swift nsdecimalnumber

为什么在使用0方法从5.0中减去650.50时会收到subtracting()

在下面的代码中,添加,乘法和除法工作正常,但为什么减法不?我做错了什么?

请参阅IBM沙箱中的代码: http://swift.sandbox.bluemix.net/#/repl/59b1387696a0602d6cb19201

import Foundation

let num1:NSDecimalNumber = 650.50
let num2:NSDecimalNumber = 5.0 

let result = num1.adding(num2)
let result2 = num1.subtracting(num2)
let result3 = num1.multiplying(by: num2)
let result4 = num1.dividing(by: num2)

print("Addition: \(result)") // Addition: 655.5
// Why am I getting 0 here and not 645.5?
print("Subtraction: \(result2)") //Subtraction: 0
print("Multiplication: \(result3)") //Multiplication: 3252.5
print("Division: \(result4)") //Division: 130.1

苹果文档: https://developer.apple.com/documentation/foundation/nsdecimalnumber

2 个答案:

答案 0 :(得分:2)

这可能是因为与NSDecimalNumber相关的IBM沙箱的特殊性(实际上,许多基础部分在Linux上仍未完全可用)。

无论如何,无论错误是什么,解决方案是使用Swift对应NSDecimalNumber Decimal.

尽管这应该只是NSDecimalNumber的一个包装器,但它提供了正确的结果,即使在IBM平台上也是如此。

请注意,此包装器不使用NSDecimalNumber方法,它使用诸如+*之类的Swift运算符。

import Foundation

let num1: Decimal = 650.50
let num2: Decimal = 5.0

let result = num1 + num2
let result2 = num1 - num2
let result3 = num1 * num2
let result4 = num1 / num2

print("Addition: \(result)")
print("Subtraction: \(result2)")
print("Multiplication: \(result3)")
print("Division: \(result4)")

给出:

  

增加:655.5
  减法:645.5
  乘法:3252.5
  分部:130.1

答案 1 :(得分:2)

您的代码没有错误,可以在Xcode / macOS中正常运行。但是,IBM的Swift沙箱使用Linux,Linux上Foundation的实现有issues。在回购的Status页面中,NSDecimalNumber被标记为"未实施"。因此,它可能有一些问题。请改用标准库中的类。