【问题标题】:String number with limited precision fraction digits in SwiftSwift中具有有限精度小数位数的字符串数
【发布时间】:2022-06-28 10:02:28
【问题描述】:

String 数字“1234.5678”转换为NSNumber,精度为-> 1234.56 并返回String“1234.56”的最快方法是什么。

let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 2
numberFormatter.string(from: numberFormatter.number(from: "1234.534234")!)

这段代码看起来并不漂亮。有什么想法吗?

【问题讨论】:

  • 不知道你在问什么。您是否试图丢弃第二个小数位之后的精度?
  • 我有一个可以有多个数字的字符串数字。最后,我想将其转换为具有特定位数的字符串,我可以手动设置。
  • 我会先使用 Decimal 而不是 NSNumber
  • 你能说得更具体些吗?

标签: swift string precision nsnumberformatter


【解决方案1】:

您可以使用新的格式化方法并将精度分数长度指定为两个:

let decimal = Decimal(
    sign: .plus,
    exponent: -4,
    significand: 12345678
)  // 1234.5678
decimal.formatted(.number.precision(.fractionLength(2))) // "1,234.57"
decimal.formatted(.number.grouping(.never).precision(.fractionLength(2)))  // "1234.57"
decimal.formatted(.number.grouping(.never).rounded(rule: .towardZero).precision(.fractionLength(2)))  // "1234.56"

【讨论】:

    【解决方案2】:

    或者,如果您只对 字符串 感兴趣,而不考虑任何数字修改(如舍入),您可以使用正则表达式去除不需要的字符

    let string = "1234.5678"
    let trimmedString = string.replacingOccurrences(of: "(\\d+\\.\\d{2})\\d.",
                                                with: "$1",
                                                options: .regularExpression)
    

    【讨论】:

    • 感谢您提供更多选择!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多