Используйте NumberFormatter с форматом C (например, "% 6.3f") - PullRequest
0 голосов
/ 27 мая 2019

Существуют ли дополнительные функции для использования NumberFormatter (Swift 5) со строкой, которая описывает формат C?

Пример: 12.3456 (с плавающей запятой) с "% 6.3f" (формат C в качестве строки) должно превратиться в 12.345 (также с плавающей точкой)

К сожалению, документация Apple не дает никаких примеров.

Мне известны maximumIntegerDigits и maximumFractionDigits иЯ знаю, что вы можете использовать «% 6.3» с NSLog и String(format: .......), но есть ли функция для NumberFormatter, которая превращает число непосредственно в число с плавающей запятой или Double (не в строку), используя указанный формат C?

1 Ответ

1 голос
/ 27 мая 2019

Если вам нужно использовать строки формата printf, я бы не советовал использовать NumberFormatter. Он не предназначен для этого. Просто используйте String(format:_:). Вы, кажется, неохотно делаете это, но не понятно почему.

Так что я мог бы предложить:

func convert(format: String, _ value: Float) -> Float? {
    let string = String(format: format, value)
    return Float(string)
}

Вы сказали:

Пример: 12.3456 (с плавающей точкой) с "% 6.3f" (формат C в виде строки) должен превратиться в 12.345 (также с плавающей точкой)

Просто чтобы прояснить, следующее выдаст 12.346, а не 12.345. Формат printf - строки круглые, а не усеченные.

let value: Float = 12.3456
print(convert(format: "%6.3f", value) ?? "Unable to convert")

Кстати, если вам нужно точное представление значения, представленного в формате printf, вместо генерации типа с плавающей запятой, вы можете сгенерировать Decimal:

func convert(format: String, _ value: Double) -> Decimal? {
    let string = String(format: format, value)
    return Decimal(string: string)
}

Это просто зависит от того, что вы делаете с этим окончательным результатом. Я также изменил это, чтобы использовать Double, так как очень легко превысить скудную точность 7 десятичных цифр, разрешенную Float.

...