BigDecimal 包在 Swift 中提供了任意精度(性能可调上限)和固定精度的十进制算术运算。
其功能分为以下几类
算术运算:加法、减法、乘法、除法、余数和求幂
使用 swift-numerics
通过 CBDecimal
类型添加了任意复杂十进制数的支持。
兼容 DecimalFloatingPoint
和 Real
协议。
常量:pi
、zero
、one
、ten
函数:exp、log、log10、log2、pow、sqrt、root、factorial、gamma、三角函数 + 反三角函数、双曲函数 + 反双曲函数
根据以下舍入模式之一进行舍入和缩放
比较:六个标准运算符 ==
, !=
, <
, <=
, >
和 >=
转换:与 String 之间、与 Double 之间、与 Decimal (Swift Foundation 类型) 之间、与 Decimal32 / Decimal64 / Decimal128 之间
支持将 Decimal32、Decimal64 和 Decimal128 值分别存储为 UInt32、UInt64 和 UInt128 值,使用密集打包十进制 (DPD) 编码或二进制整数十进制 (BID) 编码
支持 Decimal32、Decimal64 和 Decimal128 数学运算
支持 IEEE 754 关于无穷大和 NaN(非数字)的概念,后者具有 signaling
选项。
BigDecimal 需要 macOS 13.3+、iOS 16.4+、macCatalyst 13.3+、tvOS 16.4+ 或 watchOS 9.4+ 版本的 Swift。它还要求 Int
类型为 64 位类型。
BigDecimal 包依赖于 BigInt、UInt128 和 swift-numerics 包。
dependencies: [
.package(url: "https://github.com/mgriebling/BigInt.git", from: "2.2.0")
.package(url: "https://github.com/apple/swift-numerics", from: "1.0.0"),
.package(url: "https://github.com/mgriebling/UInt128.git", from: "3.1.5")
]
在您项目的 Package.swift 文件中添加类似以下的依赖项
dependencies: [
.package(url: "https://github.com/mgriebling/BigDecimal.git", from: "3.0.2"),
]
某些 Decimal32 转换和操作的测试目前失败。如果您想修复被注释掉的测试,我鼓励您这样做并反馈您的修复。对于大多数使用 Decimal64 和 Decimal128 类型的人来说,我认为这不是什么大问题。坦率地说,我只使用 BigDecimal 任意精度,因此可能不会将此作为紧急事项处理。Decimal32 的主要问题似乎在于计算后如何进行舍入。
文档使用 DocC 插件构建,并在此 GitHub Pages 位置发布
https://mgriebling.github.io/BigDecimal/documentation/bigdecimal
文档也可在 BigDecimal.doccarchive 文件中找到。