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

精度是数字中有效数字的计数,比例是小数点后有效数字的计数

【问题讨论】:

您期望scaleprecision 具有什么样的值?它们在十进制类型的各种实现中并不常见。您可能需要解释您的期望,添加一些示例将是一个好方法。 整数值,即位数 你知道Java中的BigDecimal吗?你想得到类似于 Java 的 scaleprecision 的东西吗? 是的,我正在寻找相同的 【参考方案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 中,DecimalNSDecimalNumber 很容易桥接,您最好尽可能使用Decimal

【讨论】:

以上是关于NSDecimalNumber 值的比例和精度的主要内容,如果未能解决你的问题,请参考以下文章

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

NSDecimalNumber用于精度准确的计算

如何在不损失精度的情况下解码 NSDecimalNumber?

2016-5-25NSDecimalNumber 知识点的简单整理

具有任意精度和一定比例的数字格式的 Oracle to_char 函数

NSDecimalNumber 问题