- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想按照以下规则格式化和显示 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"
如果我注释掉指定 minimumSignificantDigits
和 maximumSignificantDigits
的行,它会按预期工作(即显示至少 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/
如何在 C++ 中进行涉及有效数字的数学运算?我希望它能正确处理化学和物理实验的测量数据。一个例子:65/5 = 10。我需要去掉不需要的小数位并将一些数字替换为 0。 谢谢! 最佳答案 这应该可以满
这个任务看起来很简单 - 在输入时我得到测试数量 (numOfTests),然后是两个数字 (downBorder, upBorder) 和我必须找出这些数字(downBorder、upBorder)
如果我有 double (234.004223) 等,我想在 C# 中将其四舍五入为 x 位有效数字。 到目前为止,我只能找到舍入到 x 位小数的方法,但是如果数字中有任何 0,这只会删除精度。 例如
我是一名优秀的程序员,十分优秀!