首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很容易截断双快门

问很容易截断双快门
EN

Stack Overflow用户
提问于 2015-02-21 23:25:19
回答 6查看 7.2K关注 0票数 3

我希望能够取19.3563443的经度/纬度值,并将其转换为19.35634 (小数点5位)。有什么简单的方法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-02-21 23:34:35

您可以使用NumberFormatter

代码语言:javascript
复制
extension Formatter {
    static let number = NumberFormatter()
}
代码语言:javascript
复制
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) ?? ""
    }
}
代码语言:javascript
复制
let value = 19.3563443
let roundedToFive = value.fractionDigitsRounded(to: 5) // "19.35634"
票数 6
EN

Stack Overflow用户

发布于 2015-02-21 23:34:02

再拿双倍的钱回来。

代码语言:javascript
复制
  NSString(format: "%.5f", myfloat).doubleValue

这不会截断,但可能足够准确的长/拉到小数点5位,而且速度很快。

票数 3
EN

Stack Overflow用户

发布于 2018-11-20 01:57:48

这是数学问题,不是编码问题。String和Double之间的转换不是很有吸引力。在数学中,将数字截断到小数点的右边称为缩减标度。要截断一个非整数,您所需要做的就是将小数点移到您想要截断的位置的右边(用10将小数点相乘以移动一个小数点,乘以100将它移到两个小数,等等),将它转换为一个整数(新小数点之后的所有内容都删除),然后再将它除以原来的乘法器,将小数点返回到原来的位置。

将pi的规模缩小为3

  1. 向右移动小数: 3.1415927 * 10^3 = 3141.5927
  2. 零分= 3141.0
  3. 将小数移回: 3141 / 10^3 = 3.141

为了方便起见,将其作为Double的扩展添加:

代码语言:javascript
复制
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.14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28652617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档