【问题标题】:Scale and Precision of NSDecimalNumber valueNSDecimalNumber 值的比例和精度
【发布时间】:2019-05-15 08:19:31
【问题描述】:

假设我有一个v 类型为NSDecimalNumber 的变量

let v = 34.596904 以自己的格式。

我想知道这个数字的精度和小数位数,而不是默认数字。我在 NSDecimalNumber 类中没有找到任何提供这些值的函数,或者有人想了解它的工作原理。

precision = 8
scale = 6

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

【问题讨论】:

  • 您期望scaleprecision 具有什么样的值?它们在十进制类型的各种实现中并不常见。您可能需要解释您的期望,添加一些示例将是一个好方法。
  • 整数值,即位数
  • 你知道Java中的BigDecimal吗?你想得到类似于 Java 的 scaleprecision 的东西吗?
  • 是的,我正在寻找相同的

标签: ios swift nsnumber nsdecimalnumber


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多