我希望能够取19.3563443的经度/纬度值,并将其转换为19.35634 (小数点5位)。有什么简单的方法吗?
发布于 2015-02-21 23:34:35
您可以使用NumberFormatter
extension Formatter {
static let number = NumberFormatter()
}extension FloatingPoint {
func fractionDigitsRounded(to digits: Int, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
Formatter.number.roundingMode = roundingMode
Formatter.number.minimumFractionDigits = digits
Formatter.number.maximumFractionDigits = digits
return Formatter.number.string(for: self) ?? ""
}
}let value = 19.3563443
let roundedToFive = value.fractionDigitsRounded(to: 5) // "19.35634"发布于 2015-02-21 23:34:02
再拿双倍的钱回来。
NSString(format: "%.5f", myfloat).doubleValue这不会截断,但可能足够准确的长/拉到小数点5位,而且速度很快。
发布于 2018-11-20 01:57:48
这是数学问题,不是编码问题。String和Double之间的转换不是很有吸引力。在数学中,将数字截断到小数点的右边称为缩减标度。要截断一个非整数,您所需要做的就是将小数点移到您想要截断的位置的右边(用10将小数点相乘以移动一个小数点,乘以100将它移到两个小数,等等),将它转换为一个整数(新小数点之后的所有内容都删除),然后再将它除以原来的乘法器,将小数点返回到原来的位置。
将pi的规模缩小为3
为了方便起见,将其作为Double的扩展添加:
extension Double {
func reduceScale(to places: Int) -> Double {
let multiplier = pow(10, Double(places))
let newDecimal = multiplier * self // move the decimal right
let truncated = Double(Int(newDecimal)) // drop the fraction
let originalDecimal = truncated / multiplier // move the decimal back
return originalDecimal
}
}
let dirty = 3.1415927
let clean = dirty.reduceScale(to: 2) // 3.14https://stackoverflow.com/questions/28652617
复制相似问题