Ограничьте число с плавающей запятой двумя знаками после запятой, а также предоставьте comma_separated формат числа в Swift - PullRequest
0 голосов
/ 27 декабря 2018

У меня проблемы с ограничением числа с плавающей запятой до двух десятичных разрядов, а также с запятой в Swift.Я пробовал следующие коды:

var myNum = 99.999999
myNum = (myNum * 100).rounded() / 100
print(myNum)
//Result : 100.0, Required_Result : 99.99



let formatted = String(format: "myNum: %.2f", myNum)
//Result : 100.00, Required_Result : 99.99

Например: 1234.99999 должен дать результат как 1 234,99

Для разделения запятой и усечения до двух десятичных знаков, которые я использовал:

 let numberFormatter = NumberFormatter()
 numberFormatter.maximumFractionDigits = 2
 numberFormatter.numberStyle = NumberFormatter.Style.decimal
 let formattedNumber = numberFormatter.string(from: NSNumber(value: number))
 return formattedNumber!

Приведенный выше код дает следующий результат: Номер: 9999,9984 Результат: 1 000,0 Требуемый результат: 9 999,99

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Вот ваше решение, вам нужно использовать NumberFormatter для этой проблемы

var myNum = 9999.9998
myNum = (myNum * 100.0) / 100.0
print(myNum)

let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .decimal
currencyFormatter.maximumFractionDigits = 2
currencyFormatter.minimumFractionDigits = 2
currencyFormatter.roundingMode = .down
let s = currencyFormatter.string(from: NSNumber.init(value: myNum)) // NSNumber init with double
print(s ?? "0.0")
0 голосов
/ 27 декабря 2018

Для большей точности вы можете использовать Float80 из стандартной библиотеки Swift.

Используйте это так, и вы получите 9,999.99 результат:

let myNum = 9999.9998
let floaNumber = Float80(Int(myNum*100))
let result = Double(floaNumber/100.0)
print(result)

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal

let formattedNumber = numberFormatter.string(from: NSNumber(value: result))
print(formattedNumber!)
0 голосов
/ 27 декабря 2018

Используйте NSNumberFormatter и настройте его режим округления соответственно:

    let formatter = NumberFormatter()
    formatter.maximumFractionDigits = 2
    formatter.roundingMode = .down
    let s = formatter.string(from: 99.99999)
    print(s as Any) //99.99
...