Nikolai
Nikolai

Reputation: 243

Calculating Distance, converting to km and then cutting out decimal places

Edit 3: Thank you beyowulf, I implemented your line of code and this is the result! Exactly what I was hoping for. Thank you for all the suggestions.

Edit 2: Interesting, as per user27388882 suggestion I changed my code to:

//convert to kilometers
let kilometers = Double(round(traveledDistance) / 1000)

The result is three decimal places. Ideally I would like only two at most, but this is a step in the right direction! Thank you!

Edit 1: for clarification of "does not work": I guess I can't post a picture, but here is a link when viewed in the simulator. The distance still appears as a super long string of decimals, despite using code to try and shorten the number of decimal places. What I perceive to not be working in my code is where the decimal places should be cut off.

I am essentially creating an app that tracks a users location while riding their bicycle. One feature is to take the distance travelled by the user and display it in KM. I have gotten the distance function to work by searching through other posts. I have also looked at NSNumberFormatter help documents, but implementing code I have seen does not work. Is this an issue of distance being a double which is calculated from CLLocation? Another piece of potentially relevant information is that I am working in Xcode 7.2 and Swift2.

I don't want to post my whole code since I want to highlight where I am stuck, but not sure if more of my code is needed to solve this.

import UIKit
import CoreLocation

// Global variables

var startLocation:CLLocation!
var lastLocation: CLLocation!
var traveledDistance:Double = 0


// Identify Labels
@IBOutlet weak var distanceLabel: UILabel!

// Create a location manager
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

//Calculate the distance between points as a total distance traveled...
if startLocation == nil {
    startLocation = locations.first! as CLLocation
} else {
    let lastLocation = locations.last! as CLLocation
    let distance = startLocation.distanceFromLocation(lastLocation)
    startLocation = lastLocation
    traveledDistance += distance

    //convert to kilometers
    let kilometers = traveledDistance / 1000


    //Convert to only two decimal places
    let nf = NSNumberFormatter()
    nf.minimumSignificantDigits = 1
    nf.maximumFractionDigits = 2
    nf.numberStyle = .DecimalStyle

    nf.stringFromNumber(kilometers)

    //Update the distance label
    self.distanceLabel.text = "\(kilometers) kilometers"

Help me, stackOverFlow. You're my only hope.

tl;dr round out decimal places from distance value calculated from user location using swift2.

Upvotes: 0

Views: 1528

Answers (1)

beyowulf
beyowulf

Reputation: 15321

Shouldn't wait to round until you are ready to display the results? You can say something like:

let formatedString = String(format:"%.2f",Float(traveledDistance / 1000.0 + .005))

To get traveledDistance rounded to the neared hundredth of a kilometer.

Upvotes: 3

Related Questions