NumberFormatter()-可以填充特定数量的空格吗?

问题描述 投票:2回答:1

我正在尝试使用NumberFormatter()创建CGFloats的字符串表示形式。理想情况下,我想创建一个带符号的字符串,例如将

的值转换

10.1-> " 10.1"

-10.1-> "- 10.1",整数部分用空格填充。

这是我得到的最接近的值,但是它用“ 0”填充整数部分,所以我得到了

10.1-> " 010.1"

[-10.1"-010.1"

如果我不使用.minimumIntegerDigits,则没有填充。

我正在使用等宽字体来显示值,并且我试图确保它们在更改时不会变得乱七八糟,而我只是希望可以通过某种方式使用空格代替0但是.minimumIntegerDigits的工作方式完全相同。

extension CGFloat {
   func signedPaddedString() -> String {
      let formatter = NumberFormatter()
      formatter.positivePrefix = " "
      formatter.minimumIntegerDigits = 3
      formatter.paddingCharacter = " "
      formatter.minimumFractionDigits = 1
      formatter.maximumFractionDigits = 1
      return formatter.string(from: self as NSNumber)!
   }
}
swift string-formatting number-formatting
1个回答
1
投票

您可以通过设置positiveFormatnegativeFormat来实现属性,它们是根据Unicode Technical Standard #35

的格式模式
extension CGFloat {
   func signedPaddedString() -> String {
        let formatter = NumberFormatter()
        formatter.positiveFormat = "* ###0.0"
        formatter.negativeFormat = "-* ##0.0"
        return formatter.string(for: self)!
    }
}

print(CGFloat(10.1).signedPaddedString())    // "  10.1"
print(CGFloat(-10.1).signedPaddedString())   // "- 10.1"
print(CGFloat(123.45).signedPaddedString())  // " 123.4"
print(CGFloat(-123.45).signedPaddedString()) // "-123.4"
print(CGFloat(0).signedPaddedString())       // "   0.0"
print(CGFloat(-1).signedPaddedString())      // "-  1.0"

如果要抑制本地化(即在德国使用逗号作为小数点分隔符,请另外设置

formatter.locale = Locale(identifier: "en_US_POSIX")
© www.soinside.com 2019 - 2024. All rights reserved.