为什么减法小数不起作用-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)")