Вы хотите просто округлять currentRatioдо двух десятичных знаков или всегда округлять в большую сторону? Пример: вы хотите 3.141 -> 3.14 или 3.141 -> 3.14?
JAL
Привет, JAL, я хочу, чтобы 3.149 отображалось как 3.15. Однако 3.141 должен отображать 3.14. Спасибо
Del Hinds
См. Первую часть моего ответа для правильного округления.
JAL
Ответы:
174
Используйте строку формата округлить до двух знаков после запятой и преобразовать doubleк String:
При округлении до двух десятичных знаков должно быть 3,15.
Мэтт Ле Флер,
Я думал, что OP просто хотел округлить до двух десятичных знаков, округляя вверх или вниз по мере необходимости. Только что добавил комментарий с просьбой пояснить.
JAL
Привет, Джал, Спасибо, я использовал ваш ответ, который работал с небольшой модификацией, а именно: - _ = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)! railRatioLabelField.text! = Строка (формат: "% .2f", currentRatio)
Дель Хайндс,
2
Это ответ на вопрос: «Как отобразить Double с двумя цифрами в текстовой метке» или «... в виде строки», этот ответ не отвечает на вопрос «
Округлить
@JAL мне нужно только 0,5 или 0 после точки Например. если у нас 23,4, должно получиться 23,5, а если 23,8 должно быть 24,0
guru
33
(Swift 4.2 Xcode 11)
Простое в использовании расширение: -
Привет, я не понимаю, как вы рассчитываете с точки зрения возврата определенного десятичного числа. Что, если я хочу вернуть 3 десятичных знака?
Сифо Коза
@SiphoKoza, просто умножьте это на 1000, а затем разделите на 1000
Четан Раджагири
Это не совсем «правильный» ответ, потому что внутри число сохраняется в формате с плавающей запятой, с основанием 2, а вы пытаетесь представить число с основанием 10. Для некоторых чисел нет точного представления, и вы получите слишком много цифр, когда пойдете печатать значение. Правильный ответ должен возвращать строку, а не Double или Float.
Виктор Энгель
@levan Это работает и для нуля, только убедитесь, что это дабл
Chetan Rajagiri
1
Отличный ответ, я думаю, что это должно быть принято.
אורי orihpt
15
Подумайте об использовании NumberFormatter для этой цели, он обеспечивает большую гибкость, если вы хотите распечатать знак процента отношения или если у вас есть такие вещи, как валюта и большие числа.
Я прошел через многие, это НАМНОГО, ЛУЧШЕЕ решение! Спасибо огромное!
kalafun
13
Добавляя к приведенному выше ответу, если мы хотим отформатировать Double несколько раз, мы можем использовать расширение протокола Double, как показано ниже:
extensionDouble{
var dollarString:String {
returnString(format: "$%.2f", self)
}
}
let a = 45.666print(a.dollarString) //will print "$45.67"
Таким образом, всякий раз, когда вы хотите получить значение до двух знаков после запятой, вы просто набираете
twoDecimals ('Здесь твой номер ')
...
Просто!
Ps. Вы также можете заставить его возвращать значение с плавающей запятой или что угодно, затем снова преобразовав его после преобразования String следующим образом:
currentRatio
до двух десятичных знаков или всегда округлять в большую сторону? Пример: вы хотите 3.141 -> 3.14 или 3.141 -> 3.14?Ответы:
Используйте строку формата округлить до двух знаков после запятой и преобразовать
double
кString
:let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)! railRatioLabelField.text! = String(format: "%.2f", currentRatio)
Пример:
let myDouble = 3.141 let doubleStr = String(format: "%.2f", myDouble) // "3.14"
Если вы хотите округлить последнее десятичное место, вы можете сделать что-то вроде этого (спасибо Phoen1xUK):
let myDouble = 3.141 let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"
источник
(Swift 4.2 Xcode 11) Простое в использовании расширение: -
extension Double { func round(to places: Int) -> Double { let divisor = pow(10.0, Double(places)) return (self * divisor).rounded() / divisor } }
Использование: -
if let distanceDb = Double(strDistance) { cell.lblDistance.text = "\(distanceDb.round(to:2)) km" }
источник
func round(to places: Int) -> Double {
Обновлено до SWIFT 4 и правильный ответ на вопрос
Если вы хотите округлить до двух знаков после запятой, умножьте на 100, затем округлите и разделите на 100
var x = 1.5657676754 var y = (x*100).rounded()/100 print(y) // 1.57
источник
Подумайте об использовании NumberFormatter для этой цели, он обеспечивает большую гибкость, если вы хотите распечатать знак процента отношения или если у вас есть такие вещи, как валюта и большие числа.
let amount = 10.000001 let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.maximumFractionDigits = 2 let formattedAmount = formatter.string(from: amount as NSNumber)! print(formattedAmount) // 10
источник
Добавляя к приведенному выше ответу, если мы хотим отформатировать Double несколько раз, мы можем использовать расширение протокола Double, как показано ниже:
extension Double { var dollarString:String { return String(format: "$%.2f", self) } } let a = 45.666 print(a.dollarString) //will print "$45.67"
источник
Код для конкретных цифр после десятичных знаков:
var roundedString = String(format: "%.2f", currentRatio)
Здесь% .2f указывает Swift округлить это число до двух знаков после запятой.
источник
@Rounded , быстрая оболочка свойств 5.1 Пример:
struct GameResult { @Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4) var score: Decimal } var result = GameResult() result.score = 3.14159265358979 print(result.score) // 3.1416
источник
String(format: "%.2f", Double(round(1000*34.578)/1000))
Выход: 34,58
источник
Просто быстрый ответ для новичков вроде меня:
Вы можете сделать другие ответы очень легко реализуемыми, используя функцию с выходом . Например
func twoDecimals(number: Float) -> String{ return String(format: "%.2f", number) }
Таким образом, всякий раз, когда вы хотите получить значение до двух знаков после запятой, вы просто набираете
twoDecimals ('Здесь твой номер ')
...
Просто!
Ps. Вы также можете заставить его возвращать значение с плавающей запятой или что угодно, затем снова преобразовав его после преобразования String следующим образом:
func twoDecimals(number: Float) -> Float{ let stringValue = String(format: "%.2f", number) return Float(stringValue)! }
Надеюсь, это поможет.
источник
если вы дадите ему 234,545332233, он даст вам 234,54
let textData = Double(myTextField.text!)! let text = String(format: "%.2f", arguments: [textData]) mylabel.text = text
источник
Всего одна строка кода:
let obj = self.arrayResult[indexPath.row] let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!])
источник