Как напечатать в Swift только 2 цифры без округления? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть одно число с плавающей запятой, инициализированное из ответа сервера json, например, 65.788, 43.77, 89, 58.86985… Мне нужно распечатать это только двумя десятичными цифрами.Но без какого-либо раунда.

Моя проблема в том, что, хотя я форматирую число с плавающей запятой, чтобы добавить только две цифры, в этом формате применяется автоматический округление последней цифры.

let weight = 65.788
let string = String(format: "%.2f", weight). // ->  65.79

Я получаю 65,79, но мне нужно получить 65,78

Как можно получить из числа ответов json только две цифры без округления?Спасибо!

1 Ответ

4 голосов
/ 03 июня 2019

Используйте NumberFormatter с .roundingMode = .down

    let nf = NumberFormatter()
    nf.roundingMode = .down

    // max of 2 decimal places (e.g. 1.23, 1.2, 1)
    nf.maximumFractionDigits = 2

    // starting with Strings
    ["65.788", "1.2", "1.9", "1"].forEach { s in
        let n = Float(s)
        let t = nf.string(for: n)
        print("[" + t! + "]")
    }

    // starting with Numbers
    [65.788, 1.2, 1.9, 1].forEach { n in
        let t = nf.string(for: n)
        print("[" + t! + "]")
    }

    // if you want exactly 2 decimal places (e.g. 1.23, 1.20, 1.00)
    nf.minimumFractionDigits = 2

    // starting with Strings
    ["65.788", "1.2", "1.9", "1"].forEach { s in
        let n = Float(s)
        let t = nf.string(for: n)
        print("[" + t! + "]")
    }

    // starting with Numbers
    [65.788, 1.2, 1.9, 1].forEach { n in
        let t = nf.string(for: n)
        print("[" + t! + "]")
    }

Вывод:

[65.78]
[1.2]
[1.9]
[1]
[65.78]
[1.2]
[1.9]
[1]
[65.78]
[1.20]
[1.90]
[1.00]
[65.78]
[1.20]
[1.90]
[1.00]

Очевидно, вы хотите использовать проверку ошибок, чтобы убедиться, что ваши исходные строки могут преобразовать в числа и т. Д. *

...