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

仔细查看 number2number5 如果这是一个真正的 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 需要桥接

如何声明 NSDecimal 以及如何使用 NSDecimalAdd

NSDecimal、NSDecimalNumber、CFNumber 之间的正确选择是啥?

从 `NSDecimal` 或 `NSDecimalNumber` 转换为 C# 的 `decimal` 类型

NSDecimalNumber 用于 Swift 中的货币精度 [重复]