у меня есть строка
let str = "2.1"
Я хочу использовать его в Double и всегда иметь 2 цифры после такого разделителя:
let double = 2.10
Итак, что я делаю:
let formatter = NumberFormatter()
formatter.decimalSeparator = "."
formatter.minimumFractionDigits = 2
let myDoubleValue = formatter.number(from: str)?.doubleValue
И вывод по-прежнему только с 1 дробной цифрой: 2.1
Зачем ?
Если вы заботитесь о самом правом 0, вы не должны «приводить» его к удвоению, вы должны сохранить его как строку





Возможно, вы имеете в виду:
let str = "2.1"
if let double = Double(str) as? NSNumber {
let formatter = NumberFormatter()
formatter.decimalSeparator = "."
formatter.minimumFractionDigits = 2
if let myNewStringValue = formatter.string(from: double) {
print(myNewStringValue) // 2.10
}
}
хорошо, но я хочу двойную, поэтому вы делаете: строка> двойная> строка> двойная. Я думаю, есть лучший способ
@user3722523 user3722523 Если вы хотите Double, у вас не может быть 0 в конце - это математически бессмысленно, имеет значение только как часть строкового представления. Что именно вы пытаетесь сделать, когда вам нужно отобразить 0, но по какой-то причине оставить его Double?
пользователь вводит 1.8 в текстовое поле моего tableView (так что это строка). Затем значение регистрируется в базе данных области как двойное. Затем значение отображается в счете в формате PDF. И я не хочу иметь номер с 1 цифрой дроби и другой с 2 цифрами дроби в одном и том же счете.
Нет необходимости создавать объект NSNumber. Просто используйте метод Formatters string(for: Any) и передайте ему свой Double. if let double = Double(str) {if let myNewStringValue = formatter.string(for: double) {
@user3722523 user3722523 Но вам не нужно, чтобы это было Double, когда вы отображаете его в PDF, не так ли? Преобразуйте его и добавьте 0 при создании PDF-файла или при передаче данных в любой код, который это обрабатывает.
да, я думаю, что добавлю 0 непосредственно перед отображением значения. Но я хотел знать, есть ли решение с NumberFormatter, предназначенное для... форматирования числа...
@ user3722523 Слушай внимательно. Нет такой вещи, как форматирование числа. Вы не можете «видеть» число. Нечего форматировать. Это просто количество. Вы форматируете нить — видимый представление числа. Две вещи есть две вещи; два - это факт. «2» — это способ пишу и показывая, сколько всего есть. «2.10» — это нить, а не число.
У вас не может быть двойника с конечными 0, он будет усечен.
Если вы просто отображаете значение, оставьте его в виде строки. Если вы выполняете расчеты, какая разница в 0?
2.1и2.10— идентичные значения. MinimumFractionDigits имеет значение только при преобразовании числа в нить с десятичным представлением.