Округлення подвійного значення до x кількості десяткових знаків у швидкій формі


395

Хтось може сказати мені, як округлити подвійне значення до x кількості десяткових знаків у Свіфті?

Я маю:

var totalWorkTimeInHours = (totalWorkTime/60/60)

Маючи totalWorkTimeNSTimeInterval (подвійний) за секунду.

totalWorkTimeInHours дасть мені години, але це дає мені кількість часу в такій довгій точній кількості, наприклад, 1.543240952039 ......

Як закрутити це до, скажімо, 1.543, коли я друкую totalWorkTimeInHours?


1
Дивіться мою відповідь , щоб знайти до 9 різних способів навколо подвійного з використанням Дарвіна round(_:), Double round(), NSStringініціалізатор, Stringініціалізатор, NumberFormatter, подвійне розширенням або навіть NSDecimalNumberі Decimal.
Іману Петі

@Rounded, швидка обгортка власності 5.1: gist.github.com/abhijithpp/1cc41b41a5d1c8f007da90f20bc0c65f
Abhijith

Відповіді:


389

Для цього можна скористатися roundфункцією Swift .

Щоб округнути a Doubleз 3-х цифрною точністю, спочатку помножте її на 1000, округляйте її і ділить результат округлення на 1000:

let x = 1.23556789
let y = Double(round(1000*x)/1000)
print(y)  // 1.236

Окрім будь-якого виду printf(...)або String(format: ...)рішень, результат цієї операції все ще є типовим Double.

EDIT:
Щодо коментарів, які іноді не спрацьовують, будь ласка, прочитайте це:

Що повинен знати кожен програміст про арифметику з плаваючою комою


Чомусь це не допомагає. Я використовую це в наступному випадку TransformOf <Double, String> (fromJSON: {Double (круглий (($ 0! Як NSString) .doubleValue * 100) / 100)}, toJSON: {"($ 0)"})
Фокс

29
Не працює для мене на дитячому майданчику: let rate = 9.94999999999; Double(round(rate * 100) / 100);Вихід: 9.94999999999, 9.949999999999999працює лише для друку, але як я можу призначити його змінної?
Олександр Яковлев

Для цього слід використовувати Десяткові, а не прості дублі.
csotiriou

13
"Що повинен знати кожен комп'ютерний вчений про арифметику з плаваючою комою" - це 73 сторінки. Що TL; DR на цьому? :)
JaredH

1
@HardikDG Я не пам’ятаю, вибачте :-)
Олександр Яковлев

430

Розширення для Swift 2

Більш загальним рішенням є наступне розширення, яке працює зі Swift 2 та iOS 9:

extension Double {
    /// Rounds the double to decimal places value
    func roundToPlaces(places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return round(self * divisor) / divisor
    }
}


Розширення для Swift 3

У Swift 3 roundзамінено rounded:

extension Double {
    /// Rounds the double to decimal places value
    func rounded(toPlaces places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}


Приклад, який повертає подвійний округлення до 4 знаків після коми:

let x = Double(0.123456789).roundToPlaces(4)  // x becomes 0.1235 under Swift 2
let x = Double(0.123456789).rounded(toPlaces: 4)  // Swift 3 version

17
Характер подвійного Свіфта виглядає в тому, що він може бути неточним - через спосіб його зберігання / доступу до бінарних даних навіть використання цієї функції округлення не поверне число, округлене до 3 знаків після коми: наприклад, round(8.46 * pow(10.0, 3.0)) / pow(10.0, 3.0) повернення 8.460000000000001. Так само і з Float, принаймні в цьому сценарії , насправді, здається, працює: round(Float(8.46) * pow(10.0, 3.0)) / pow(10.0, 3.0)врожайність 8.46. Просто щось, що варто відзначити.
Бен Сафлі

2
На жаль, у Swift 3 це більше не працює, я отримую цю помилкуNo '*' candidates produce the expected contextual result type 'FloatingPointRoundingRule'
koen

2
Я оновив рішення та додав розширення для Swift 3.
Себастьян

2
Щоб бути швидкішим 3 ... вам слід змінити функцію округлення (toSlaces places: Int) -> Double
FouZ

2
@BenSaufley Але це також не працює, якщо ви введете 98.68. У такому випадку я отримую 98,6800003
Олександр Хитев

340

Як закрутити це до, скажімо, 1.543, коли я друкую totalWorkTimeInHours ?

Для округлення totalWorkTimeInHoursдо 3 цифр для друку використовуйте Stringконструктор, який бере formatрядок:

print(String(format: "%.3f", totalWorkTimeInHours))

24
Це укорочення, а не округлення
Eyeball

33
@Eyeball: Насправді, це робить круглий. Це та ж поведінка, що і функція C printf, яка округляє запитувані цифри. Тож String(format: "%.3f", 1.23489)відбитки1.235
zisoft

6
Оригінальний плакат шукає числове значення, а не рядок для відображення.
pr1001

17
@ pr1001, можливо, так, але тоді це було не ясно, і 46 інших людей вважають мою відповідь корисною. Переповнення стека - це більше, ніж просто допомога OP.
vacawama

3
дивно, що це повертає 0,00 кожного разу.
Ерік Н

254

З Swift 5, відповідно до ваших потреб, ви можете вибрати один із 9 наступних стилів , щоб отримати округлий результат від a Double.


№1. Використовуючи FloatingPoint rounded()метод

У найпростішому випадку ви можете скористатися Double rounded()методом.

let roundedValue1 = (0.6844 * 1000).rounded() / 1000
let roundedValue2 = (0.6849 * 1000).rounded() / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685

№2. Використовуючи FloatingPoint rounded(_:)метод

let roundedValue1 = (0.6844 * 1000).rounded(.toNearestOrEven) / 1000
let roundedValue2 = (0.6849 * 1000).rounded(.toNearestOrEven) / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685

№3. Використання roundфункції Дарвіна

Фонд пропонує roundфункцію через Дарвіна.

import Foundation

let roundedValue1 = round(0.6844 * 1000) / 1000
let roundedValue2 = round(0.6849 * 1000) / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685

№4. Використання Doubleспеціального методу розширення, побудованого за допомогою Дарвіна roundтаpow функцій

Якщо ви хочете повторити попередню операцію багато разів, рефакторинг коду може стати хорошою ідеєю.

import Foundation

extension Double {
    func roundToDecimal(_ fractionDigits: Int) -> Double {
        let multiplier = pow(10, Double(fractionDigits))
        return Darwin.round(self * multiplier) / multiplier
    }
}

let roundedValue1 = 0.6844.roundToDecimal(3)
let roundedValue2 = 0.6849.roundToDecimal(3)
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685

№5. ВикористанняNSDecimalNumber rounding(accordingToBehavior:) метод

За потреби NSDecimalNumberпропонує багатослівне, але потужне рішення для округлення десяткових чисел.

import Foundation

let scale: Int16 = 3

let behavior = NSDecimalNumberHandler(roundingMode: .plain, scale: scale, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)

let roundedValue1 = NSDecimalNumber(value: 0.6844).rounding(accordingToBehavior: behavior)
let roundedValue2 = NSDecimalNumber(value: 0.6849).rounding(accordingToBehavior: behavior)

print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685

№6. Використання NSDecimalRound(_:_:_:_:)функції

import Foundation

let scale = 3

var value1 = Decimal(0.6844)
var value2 = Decimal(0.6849)

var roundedValue1 = Decimal()
var roundedValue2 = Decimal()

NSDecimalRound(&roundedValue1, &value1, scale, NSDecimalNumber.RoundingMode.plain)
NSDecimalRound(&roundedValue2, &value2, scale, NSDecimalNumber.RoundingMode.plain)

print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685

№7. ВикористанняNSString init(format:arguments:) ініціалізатора

Якщо ви хочете повернути a NSStringз вашої операції округлення, використання NSStringініціалізатора - це просте, але ефективне рішення.

import Foundation

let roundedValue1 = NSString(format: "%.3f", 0.6844)
let roundedValue2 = NSString(format: "%.3f", 0.6849)
print(roundedValue1) // prints 0.684
print(roundedValue2) // prints 0.685

№8. Використання String init(format:_:)ініціалізатора

StringТип Свіфта пов'язаний з NSStringкласом Foundation . Тому ви можете використовувати наступний код, щоб повернути a Stringз вашої операції округлення:

import Foundation

let roundedValue1 = String(format: "%.3f", 0.6844)
let roundedValue2 = String(format: "%.3f", 0.6849)
print(roundedValue1) // prints 0.684
print(roundedValue2) // prints 0.685

№9. ВикористанняNumberFormatter

Якщо ви очікуєте, що ви отримаєте String?від своєї операції округлення, NumberFormatterпропонуємо дуже настроюване рішення.

import Foundation

let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
formatter.roundingMode = NumberFormatter.RoundingMode.halfUp
formatter.maximumFractionDigits = 3

let roundedValue1 = formatter.string(from: 0.6844)
let roundedValue2 = formatter.string(from: 0.6849)
print(String(describing: roundedValue1)) // prints Optional("0.684")
print(String(describing: roundedValue2)) // prints Optional("0.685")

1
Чудова відповідь. Я б підказав на №5, який ви можете розглянути, як це використовувати Decimal, а це безкоштовне з'єднання NSDecimalNumber. Decimalє рідною тип і пропонує Свіфта більш витончена підтримка рідних операторів , як +, -і т.д.
Rob

@Rob Я оновив свою відповідь NSDecimalRound(_:_:_:_:)функцією. Дякую.
Іману Петіт

Використання вибору №9 гарантує, що ви очікуєте фіксовану дріб (кількість точних цифр), скажімо, десяткове число 43.12345 і дріб = 6, ви отримаєте 43.123450
Almas

1
@ImanouPetit Дякую, що ви опублікували це. Я можу занурити пару розширень.
Адріан

Мені сумно, NumberFormatterце останній варіант, хоча він повинен бути першим для представлення номерів користувачам. Жоден інший метод не генерує правильно локалізовані числа.
Султан


50

Це повністю відпрацьований код

Swift 3.0 / 4.0 / 5.0, Xcode 9.0 GM / 9.2 і вище

let doubleValue : Double = 123.32565254455
self.lblValue.text = String(format:"%.f", doubleValue)
print(self.lblValue.text)

вихід - 123

let doubleValue : Double = 123.32565254455
self.lblValue_1.text = String(format:"%.1f", doubleValue)
print(self.lblValue_1.text)

вихід - 123,3

let doubleValue : Double = 123.32565254455
self.lblValue_2.text = String(format:"%.2f", doubleValue)
print(self.lblValue_2.text)

вихід - 123,33

let doubleValue : Double = 123.32565254455
self.lblValue_3.text = String(format:"%.3f", doubleValue)
print(self.lblValue_3.text)

вихід - 123.326


1
одна лінія ?, здається, 3 рядки;)
Петтер Фріберг

ви не можете обчислити речі за допомогою рядків, я не вважаю, що це правильна відповідь, оскільки це лише для відображення.
JBarros35

25

Спираючись на відповідь Йоги, ось функція Swift, яка виконує цю роботу:

func roundToPlaces(value:Double, places:Int) -> Double {
    let divisor = pow(10.0, Double(places))
    return round(value * divisor) / divisor
}

20

У Swift 3.0 та Xcode 8.0:

extension Double {
    func roundTo(places: Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

Використовуйте це розширення так:

let doubleValue = 3.567
let roundedValue = doubleValue.roundTo(places: 2)
print(roundedValue) // prints 3.56

19

Швидкий 4, Xcode 10

yourLabel.text =  String(format:"%.2f", yourDecimalValue)

1
Я не спровокував, але думаю, що причина може бути в тому, що це повернення рядкового представлення числа, а не числа. Що добре, якщо це все, що вам потрібно, але, можливо, ви хочете, щоб саме число було округлене для подальшого використання. ОП сказала "коли я друкую", тому я вважаю, що це прийнятне, просте та чисте рішення в цьому випадку.
Бен Шталь

1
Ідеально. Однорядне рішення. Мені просто потрібно було показувати десяткові значення як рядки на своїх мітках.
Zeeshan

18

Код для конкретних цифр після десяткових знаків:

var a = 1.543240952039
var roundedString = String(format: "%.3f", a)

Тут% .3f повідомляє швидкому зробити це число округленим до 3 знаків після коми. І якщо ви хочете подвійне число, ви можете використовувати цей код:

// Рядок удвічі

var roundedString = Double(String(format: "%.3f", b))


14

Використовуйте вбудовану бібліотеку фонду Дарвіна

SWIFT 3

extension Double {
    func round(to places: Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return Darwin.round(self * divisor) / divisor
    }
}

Використання:

let number:Double = 12.987654321
print(number.round(to: 3)) 

Виходи: 12.988


9

Зручним способом може бути використання розширення типу Double

extension Double {
    var roundTo2f: Double {return Double(round(100 *self)/100)  }
    var roundTo3f: Double {return Double(round(1000*self)/1000) }
}

Використання:

let regularPie:  Double = 3.14159
var smallerPie:  Double = regularPie.roundTo3f  // results 3.142
var smallestPie: Double = regularPie.roundTo2f  // results 3.14

9

Якщо ви хочете округлити Doubleзначення, можливо, ви хочете використовувати Swift, Decimalщоб ви не вводили помилок, які можуть з’являтися під час спроби зрівнятися з цими округлими значеннями. Якщо ви використовуєте Decimal, він може точно представляти десяткові значення цього округлого значення з плаваючою комою.

Отже, ви можете зробити:

extension Double {
    /// Convert `Double` to `Decimal`, rounding it to `scale` decimal places.
    ///
    /// - Parameters:
    ///   - scale: How many decimal places to round to. Defaults to `0`.
    ///   - mode:  The preferred rounding mode. Defaults to `.plain`.
    /// - Returns: The rounded `Decimal` value.

    func roundedDecimal(to scale: Int = 0, mode: NSDecimalNumber.RoundingMode = .plain) -> Decimal {
        var decimalValue = Decimal(self)
        var result = Decimal()
        NSDecimalRound(&result, &decimalValue, scale, mode)
        return result
    }
}

Потім ви можете отримати округлене Decimalзначення так:

let foo = 427.3000000002
let value = foo.roundedDecimal(to: 2) // results in 427.30

І якщо ви хочете відобразити його із заданою кількістю десяткових знаків (а також локалізувати рядок для поточного локального пункту користувача), ви можете використовувати NumberFormatter:

let formatter = NumberFormatter()
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2

if let string = formatter.string(for: value) {
    print(string)
}

2
Найкраща відповідь поки що.
Котардар

(4.81).roundedDecimal(to: 2, mode: .down)повернеться 4,8 замість 4,81, використовуйте Decimal(string: self.description)!для точногоdecimalValue
vk.edward.li

1
@ vk.edward.li - Так, слід насторожено ставитись до округлення десяткових знаків вгору / вниз, тому що значення типу 4.81 просто неможливо точно представити Double(це стає 4.8099999999999996). Але я б радив не користуватися description(оскільки округлення, яке використовується, не зафіксовано, воно може бути змінено). Якщо ви дійсно хочете займатися математикою з точністю до десятків, вам слід уникати Doubleцілком і замість цього використовувати Decimalбезпосередньо (наприклад, Decimal(sign: .plus, exponent: -2, significand: 481)або Decimal(string: "4.81"). Але не користуватися description.
Роб

@Rob, як правило, неможливо отримати значення рядка "4,81", якщо воно зберігається як Double, тому вам доведеться використовувати self.description (модифікований алгоритм Grisu2), щоб виправити втрату
точності

Я розумію вашу думку. Я просто не згоден з вашим рішенням. Поведінка descriptionметоду округлення не є ні задокументованою, ні гарантованою. Плюс це не локалізовано. IMHO, це помилка використовувати descriptionдля чогось іншого, крім ведення журналу. Я б або користувався на Decimalвсьому протязі, уникаючи використання Doubleцілком, або просто використовував інший режим округлення. Або, якщо потрібно, скористайтеся власним локалізованим методом, який використовує алгоритм стилю Grisu (але це здається непотрібним, коли ви знаєте, скільки десяткових знаків ви хочете округлити). Але я б не покладався на цю допоміжну поведінку description.
Роб

8

Це такий собі довгий спосіб вирішення, який може стати в нагоді, якщо ваші потреби будуть трохи складнішими. Ви можете використовувати формат чисел у Swift.

let numberFormatter: NSNumberFormatter = {
    let nf = NSNumberFormatter()
    nf.numberStyle = .DecimalStyle
    nf.minimumFractionDigits = 0
    nf.maximumFractionDigits = 1
    return nf
}()

Припустимо, ваша змінна, яку ви хочете надрукувати

var printVar = 3.567

Це забезпечить повернення у потрібному форматі:

numberFormatter.StringFromNumber(printVar)

Таким чином, результат буде "3,6" (округлий). Хоча це не найекономічніше рішення, я даю це тому, що в ОП згадується друк (в цьому випадку String не є небажаним) і тому, що цей клас дозволяє встановлювати кілька параметрів.


1
Швидке зауваження, що будь-який форматер є досить дорогим програмним шляхом, що робить його необдуманим для завдань, які потрібно виконувати швидко або повторно.
Джонатан Торнтон

7

Я б користувався

print(String(format: "%.3f", totalWorkTimeInHours))

і змінити .3f на будь-яку кількість десяткових чисел, які вам потрібні


Він хотів надрукувати трьома цифрами, щоб не отримати його в NSTimeInterval
Mohsen Hossein pour

7

Або:

  1. Використання String(format:):

    • Приведення Doubleдо Stringз %.3fспецифікатор формату , а потім назадDouble

      Double(String(format: "%.3f", 10.123546789))!
    • Або розгорніть Doubleдля обробки N-десяткових місць:

      extension Double {
          func rounded(toDecimalPlaces n: Int) -> Double {
              return Double(String(format: "%.\(n)f", self))!
          }
      }
  2. За розрахунком

    • помножте на 10 ^ 3, округніть його і потім діліть на 10 ^ 3 ...

      (1000 * 10.123546789).rounded()/1000
    • Або розгорніть Doubleдля обробки N-десяткових місць:

      extension Double {    
          func rounded(toDecimalPlaces n: Int) -> Double {
              let multiplier = pow(10, Double(n))
              return (multiplier * self).rounded()/multiplier
          }
      }

6

Це більш гнучкий алгоритм округлення до N значущих цифр

Рішення Swift 3

extension Double {
// Rounds the double to 'places' significant digits
  func roundTo(places:Int) -> Double {
    guard self != 0.0 else {
        return 0
    }
    let divisor = pow(10.0, Double(places) - ceil(log10(fabs(self))))
    return (self * divisor).rounded() / divisor
  }
}


// Double(0.123456789).roundTo(places: 2) = 0.12
// Double(1.23456789).roundTo(places: 2) = 1.2
// Double(1234.56789).roundTo(places: 2) = 1200

6

Найкращий спосіб відформатувати подвійну властивість - це використовувати попередньо визначені методи Apple.

mutating func round(_ rule: FloatingPointRoundingRule)

FloatingPointRoundingRule - це перелік, який має наступні можливості

Випадки перерахування:

справа від FZZero Round до найближчого дозволеного значення, величина якого більше або дорівнює величині джерела.

справа вниз Закругніть до найближчого дозволеного значення, яке менше або рівне джерелу.

справа до НайближчогоОстороньFromZero Round до найближчого дозволеного значення; якщо два значення однаково близькі, вибирається одне з більшою величиною.

справа доNearestOrEven Round до найближчого дозволеного значення; якщо два значення однаково близькі, вибирається рівне.

справа до Зеро до Round до найближчого дозволеного значення, величина якого менша або рівна величині джерела.

випадок " Раунд" до найближчого дозволеного значення, яке більше або рівне джерелу.

var aNumber : Double = 5.2
aNumber.rounded(.up) // 6.0

6

округніть подвійне значення до x числа десяткового
NO. цифр після десяткових

var x = 1.5657676754
var y = (x*10000).rounded()/10000
print(y)  // 1.5658 

var x = 1.5657676754 
var y = (x*100).rounded()/100
print(y)  // 1.57 

var x = 1.5657676754
var y = (x*10).rounded()/10
print(y)  // 1.6

Що відбувається з цим кодом? Що демонструють три приклади?
Rene

Відповіді лише на код не корисні. Спробуйте пояснити, що робить кожен із цих прикладів.
Moe

5

Не Свіфт, але я впевнений, що ви зрозуміли цю ідею.

pow10np = pow(10,num_places);
val = round(val*pow10np) / pow10np;

4

Здається, це працює у Swift 5.

Досить здивований, що для цього вже немає стандартної функції.

// Відсікання подвійних до n-десяткових знаків із заокругленням

extension Double {

    func truncate(to places: Int) -> Double {
    return Double(Int((pow(10, Double(places)) * self).rounded())) / pow(10, Double(places))
    }

}

2

Ви можете додати це розширення:

extension Double {
    var clean: String {
        return self.truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(format: "%.2f", self)
    }
}

і називайте це так:

let ex: Double = 10.123546789
print(ex.clean) // 10.12

Це акуратне втілення, представляючи його як струну. Мені цікаво, чи можна або раціонально написати розширення кількості представлення цифр після періоду, зберігаючи його як подвійне.
thinkwift

2

Щоб уникнути поплавкових недоліків, використовуйте Десяткові

extension Float {
    func rounded(rule: NSDecimalNumber.RoundingMode, scale: Int) -> Float {
        var result: Decimal = 0
        var decimalSelf = NSNumber(value: self).decimalValue
        NSDecimalRound(&result, &decimalSelf, scale, rule)
        return (result as NSNumber).floatValue
    }
}

колишній
1075,58 раундів до 1075,57 при використанні Float зі шкалою: 2 і .down
1075,58 раундами до 1075,58 при використанні десяткової за шкалою: 2 і .down


1

Мені це було цікаво, чи можна виправити введення користувача. Тобто якщо вони вводять три десяткові дроби замість двох на суму долара. Скажіть, 1.111 замість 1.11 ви можете виправити це шляхом округлення? Відповідь з багатьох причин - ні! З грошима все, що перевищує 0,001, врешті-решт спричинить проблеми у справжній чековій книзі.

Ось функція перевіряти введення користувачами занадто багато значень після періоду. Але що дозволить 1., 1.1 та 1.11.

Передбачається, що значення вже перевірено для успішного перетворення з рядка в подвійне.

//func need to be where transactionAmount.text is in scope

func checkDoublesForOnlyTwoDecimalsOrLess()->Bool{


    var theTransactionCharacterMinusThree: Character = "A"
    var theTransactionCharacterMinusTwo: Character = "A"
    var theTransactionCharacterMinusOne: Character = "A"

    var result = false

    var periodCharacter:Character = "."


    var myCopyString = transactionAmount.text!

    if myCopyString.containsString(".") {

         if( myCopyString.characters.count >= 3){
                        theTransactionCharacterMinusThree = myCopyString[myCopyString.endIndex.advancedBy(-3)]
         }

        if( myCopyString.characters.count >= 2){
            theTransactionCharacterMinusTwo = myCopyString[myCopyString.endIndex.advancedBy(-2)]
        }

        if( myCopyString.characters.count > 1){
            theTransactionCharacterMinusOne = myCopyString[myCopyString.endIndex.advancedBy(-1)]
        }


          if  theTransactionCharacterMinusThree  == periodCharacter {

                            result = true
          }


        if theTransactionCharacterMinusTwo == periodCharacter {

            result = true
        }



        if theTransactionCharacterMinusOne == periodCharacter {

            result = true
        }

    }else {

        //if there is no period and it is a valid double it is good          
        result = true

    }

    return result


}

1
//find the distance between two points
let coordinateSource = CLLocation(latitude: 30.7717625, longitude:76.5741449 )
let coordinateDestination = CLLocation(latitude: 29.9810859, longitude: 76.5663599)
let distanceInMeters = coordinateSource.distance(from: coordinateDestination)
let valueInKms = distanceInMeters/1000
let preciseValueUptoThreeDigit = Double(round(1000*valueInKms)/1000)
self.lblTotalDistance.text = "Distance is : \(preciseValueUptoThreeDigit) kms"


1

Ось для SwiftUI, якщо вам потрібен елемент Text зі значенням числа.

struct RoundedDigitText : View {
    let digits : Int
    let number : Double

    var body : some View {
        Text(String(format: "%.\(digits)f", number))
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.