Swift указать double без преобразования в строку - PullRequest
0 голосов
/ 24 января 2020

Я хочу указать свой (ползунок) двойной до 2 десятичных знаков, но xcode не позволит мне сделать это:

return (Double(pris, specifier: "%.2f"))

И я не хочу преобразовывать его в строку, а затем форматировать потому что числа вроде 600000000 не читаются.

Я пробовал такие решения, как:

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
  }
}

Ответы [ 3 ]

1 голос
/ 24 января 2020
let b: Double = Double(600000000.376)
let result = Double(round(100*b)/100)
print(result) // prints 600000000.38
1 голос
/ 24 января 2020

Это должно сделать то, что вам нужно:

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

print(10.125.roundedTo(places: 2)) // prints 10.13
print(10.124.roundedTo(places: 2)) // prints 10.12
0 голосов
/ 25 января 2020

Простым решением было удалить (Double) перед вычислением.

return (Double (pris, спецификатор: "% .2f"))

должно быть только

pris, спецификатор: "% .2f")

...