gpt4 book ai didi

ios - NumberFormatter 在使用有效数字时不遵守 minimumFractionDigits

转载 作者:行者123 更新时间:2023-11-28 14:53:22 26 4
gpt4 key购买 nike

我想按照以下规则格式化和显示 Double:

If there are more than 2 fractional digits, display it as 6 significant figures, otherwise just display its original value with a minimum of 2 fractional digits.

为了根据我的需要格式化数字,我使用以下方法声明了一个扩展:

extension NSNumber {
func significantFormattedString(minimum: Int = 2, maximum: Int = 6) -> String {
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en_US")
formatter.minimumSignificantDigits = minimum
formatter.maximumSignificantDigits = maximum
formatter.minimumFractionDigits = 2
formatter.usesGroupingSeparator = true
formatter.minimumIntegerDigits = 1
formatter.numberStyle = .decimal

return formatter.string(from: self) ?? "-"
}
}

然后在使用以下代码进行测试时:

let myNumber = NSNumber(value: 7568.9)
let myString = myNumber.significantFormattedString()
print("\(myString)") // prints "7,568.9"

如果我注释掉指定 minimumSignificantDigitsmaximumSignificantDigits 的行,它会按预期工作(即显示至少 2 个小数位,“7,568.90”)

有什么办法可以达到我想要的结果,还是只能重新格式化结果?

谢谢!

最佳答案

你说“如果有超过 2 个小数位”。一个数字不能“有”2 个小数位。您可以将无限数量的小数位 (0) 添加到数字中,并且该值不会改变。您将实际值与格式字符串混淆了。

你真正的意思可能是“如果数字乘以 100 是一个整数”。为此,您需要一个 if 语句:

let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en_US")
formatter.usesGroupingSeparator = true
formatter.minimumIntegerDigits = 1
formatter.numberStyle = .decimal
// this checks if the number has two leading fractional digits that are not zero
if (a * pow(10, minimum)).truncatingRemainder(dividingBy: 1) == 0 {
formatter.minimumFractionDigits = minimum
} else {
formatter.minimumSignificantDigits = maximum
}
return formatter.string(from: self) ?? "-"

关于ios - NumberFormatter 在使用有效数字时不遵守 minimumFractionDigits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com