为什么减法小数不起作用-Swift 3

为什么减法小数不起作用-Swift 3,swift,nsdecimalnumber,Swift,Nsdecimalnumber,为什么使用subtraction()方法从650.50中减去5.0时,我会得到0 在下面的代码中,加法、乘法和除法都很好,但为什么减法不行呢?我做错了什么 请参阅IBM沙盒中的代码: 苹果文件: < P>这可能是因为IBM Sobox与NSCDIMALL相关的特殊性(确实很多基础部分在Linux上仍然不完全可用)。 无论如何,不管是什么错误,解决方法是使用Swift对应的NSDecimalNumber,即十进制。 尽管这应该只是NSDecimalNumber的包装器,但它给出了正确的结果,即

为什么使用
subtraction()
方法从
650.50
中减去
5.0
时,我会得到
0

在下面的代码中,加法、乘法和除法都很好,但为什么减法不行呢?我做错了什么

请参阅IBM沙盒中的代码:

苹果文件:

< P>这可能是因为IBM Sobox与NSCDIMALL相关的特殊性(确实很多基础部分在Linux上仍然不完全可用)。 无论如何,不管是什么错误,解决方法是使用Swift对应的
NSDecimalNumber
,即
十进制。

尽管这应该只是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


您的代码没有错误,在Xcode/macOS中工作正常。然而,IBM的Swift sandbox使用Linux,并且在Linux上实现
Foundation
。在回购协议页面中,
NSDecimalNumber
标记为“未执行”。因此,它可能有一些问题。改用标准库中的类。

我在XCode Swift游乐场中得到了“645.5”。可能是IBM部分的问题(比如说不是iOS/macOS Swift部分)。嗯,这很奇怪。感谢您的检查(我现在不在电脑旁)。请尝试使用
result2。doubleValue
result2。doubleValue
可以工作,但根据文档,它应该返回一个NSDecimalNumber,您无需执行此操作。谢谢。快速提问,
decimalnumber
是否与
NSDecimalNumber
相同?换句话说,
Decimal
是推荐的货币吗?非常感谢
DecimalNumber
应与
NSDecimalNumber
的类型相同,但已转换为Swift。它真正用于货币计算(十进制、高精度算术)。但是,与
NSDecimalNumber
@fs\tigre相比,缺少了一些方法。文档中指出这两种方法是桥接的,所以我想说是的,十进制应该具有相同的行为。很酷,
decimalnumber
可能是我的最佳选择,因为您可以使用本机Swift运算符(+、-等等)。我将使用
Decimal
查看缺少哪些方法。非常感谢。我相信十进制实际上对应于NSDecimal。NSDecimalNumber是围绕NSDecimal的包装。无论哪种情况,这都是处理货币问题的首选方式。有关更多信息,请参阅此答案。
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)")