swift 是否从货币中删除小数位数?

kuarbcqp  于 2022-11-21  发布在  Swift
关注(0)|答案(3)|浏览(197)

我举了下面的例子:

// Currencies

var price: Double = 3.20
println("price: \(price)")

let numberFormater = NSNumberFormatter()
numberFormater.locale = locale
numberFormater.numberStyle = NSNumberFormatterStyle.CurrencyStyle
numberFormater.maximumFractionDigits = 2

我希望有2个摘要的货币输出。如果货币摘要都是零,我希望它们不会显示。所以3,00应该显示为:3。所有其他值应与两个摘要一起显示。
"我该怎么做"

wecizke3

wecizke31#

必须将numberStyle设置为.decimal样式,才能根据浮点数是否为偶数来设置minimumFractionDigits属性:

extension FloatingPoint {
    var isWholeNumber: Bool { isZero ? true : !isNormal ? false : self == rounded() }
}

您还可以扩展格式化程序并创建静态格式化程序,以避免在运行代码时多次创建格式化程序:
第一次
运动场测试:

3.0.currencyFormatted            // "$3"
3.12.currencyFormatted           // "$3.12"
3.2.currencyFormatted            // "$3.20"

3.0.currencyNoSymbolFormatted    // "3"
3.12.currencyNoSymbolFormatted   // "3.12"
3.2.currencyNoSymbolFormatted    // "3.20"

let price = 3.2
print("price: \(price.currencyFormatted)")  // "price: $3.20\n"
9rnv2umw

9rnv2umw2#

除了使用NSNumberFormatter之外,您还可以使用NSString init(格式:参数:)
var string = NSString(format:@"%.2g" arguments:price)
我不太擅长斯威夫特,但这个应该可以。
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265

ffscu2ro

ffscu2ro3#

使用此

extension Double {
    var currencyFormatted: String {
      var isWholeNumber: Bool { isZero ? true : !isNormal ? false : self == rounded() }
      let formatter = NumberFormatter()
      formatter.numberStyle = .currency
      formatter.minimumFractionDigits = isWholeNumber ? 0 : 2
      return formatter.string(for: self) ?? ""
    }
  }

相关问题