NSDecimalNumber 值的比例和精度
Posted
技术标签:
【中文标题】NSDecimalNumber 值的比例和精度【英文标题】:Scale and Precision of NSDecimalNumber value 【发布时间】:2019-05-15 08:19:31 【问题描述】:假设我有一个v
类型为NSDecimalNumber
的变量
let v = 34.596904
以自己的格式。
我想知道这个数字的精度和小数位数,而不是默认数字。我在 NSDecimalNumber
类中没有找到任何提供这些值的函数,或者有人想了解它的工作原理。
precision = 8
scale = 6
精度是数字中有效数字的计数,比例是小数点后有效数字的计数
【问题讨论】:
您期望scale
或precision
具有什么样的值?它们在十进制类型的各种实现中并不常见。您可能需要解释您的期望,添加一些示例将是一个好方法。
整数值,即位数
你知道Java中的BigDecimal
吗?你想得到类似于 Java 的 scale
或 precision
的东西吗?
是的,我正在寻找相同的
【参考方案1】:
此扩展程序将为您提供唯一示例的特定值:
extension Decimal
var scale: Int
return -self.exponent
var precision: Int
return Int(floor(log10((self.significand as NSDecimalNumber).doubleValue)))+1
用法:
let v: NSDecimalNumber = NSDecimalNumber(string: "34.596904")
print("precision=\((v as Decimal).precision)") //->precision=8
print("scale=\((v as Decimal).scale)") //->scale=6
但我无法确定这是否会在您想到的所有情况下产生预期结果,因为您只展示了一个示例...
另外,在 Swift 中,Decimal
和 NSDecimalNumber
很容易桥接,您最好尽可能使用Decimal
。
【讨论】:
以上是关于NSDecimalNumber 值的比例和精度的主要内容,如果未能解决你的问题,请参考以下文章
NSDecimalNumber 用于 Swift 中的货币精度 [重复]
如何在不损失精度的情况下解码 NSDecimalNumber?
2016-5-25NSDecimalNumber 知识点的简单整理