为什么减去 NSDecimalNumbers 不起作用 - Swift 3
Why subtracting NSDecimalNumbers do not work - Swift 3
为什么使用 subtracting()
方法从 650.50
中减去 5.0
时得到 0
?
在下面的代码中,加法、乘法和除法都可以,为什么减法不行呢?我做错了什么?
查看 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
Apple 文档:
https://developer.apple.com/documentation/foundation/nsdecimalnumber
这可能是因为与 NSDecimalNumber 相关的 IBM 沙箱的特殊性(事实上 Foundation 的许多部分在 Linux 上仍然不完全可用)。
无论如何,无论错误是什么,解决方案是使用 NSDecimalNumber
的 Swift 对应项,即 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)")
给出:
Addition: 655.5
Subtraction: 645.5
Multiplication: 3252.5
Division: 130.1
您的代码没有错,在 Xcode/macOS 中可以正常工作。然而,IBM 的 Swift 沙箱使用 Linux,Foundation
在 Linux 上的实现有 issues. In the Status 页面的 repo,NSDecimalNumber
被标记为"Unimplemented"。因此,它可能存在一些问题。请改用标准库中的 类。
为什么使用 subtracting()
方法从 650.50
中减去 5.0
时得到 0
?
在下面的代码中,加法、乘法和除法都可以,为什么减法不行呢?我做错了什么?
查看 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
Apple 文档: https://developer.apple.com/documentation/foundation/nsdecimalnumber
这可能是因为与 NSDecimalNumber 相关的 IBM 沙箱的特殊性(事实上 Foundation 的许多部分在 Linux 上仍然不完全可用)。
无论如何,无论错误是什么,解决方案是使用 NSDecimalNumber
的 Swift 对应项,即 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)")
给出:
Addition: 655.5
Subtraction: 645.5
Multiplication: 3252.5
Division: 130.1
您的代码没有错,在 Xcode/macOS 中可以正常工作。然而,IBM 的 Swift 沙箱使用 Linux,Foundation
在 Linux 上的实现有 issues. In the Status 页面的 repo,NSDecimalNumber
被标记为"Unimplemented"。因此,它可能存在一些问题。请改用标准库中的 类。