Swift - 将两个 NSDecimal 数字相乘
Posted
技术标签:
【中文标题】Swift - 将两个 NSDecimal 数字相乘【英文标题】:Swift - Multiply two NSDecimal Numbers 【发布时间】: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 的。
谢谢。
【问题讨论】:
【参考方案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
我知道回答太晚了,但有人可能会觉得它有帮助。
【讨论】:
以上是关于Swift - 将两个 NSDecimal 数字相乘的主要内容,如果未能解决你的问题,请参考以下文章
将非常大的 NSDecimal 转换为字符串,例如。 400,000,000,000 -> 400 T 等等
如何声明 NSDecimal 以及如何使用 NSDecimalAdd
NSDecimal、NSDecimalNumber、CFNumber 之间的正确选择是啥?