Как вы усекаете ненужную точность с плавающей запятой в Swift? - PullRequest
0 голосов
/ 01 августа 2020

Я создаю приложение-калькулятор. Когда я нажимаю кнопку % на калькуляторе, текущее значение умножается на 0,01.

Если я нажимаю 52 * 0.01, я получаю 0.52. Но если я нажму его еще раз, он вычислит 0.52 * 0.01, и я получу 0.005200000000000001.

Это значение отображается для пользователя приложения. Как усечь лишние числа, чтобы в итоге получилось 0.0052, чтобы было больше смысла?

Ответы [ 2 ]

0 голосов
/ 01 августа 2020
let formatterUpperBreakPoint = 999999999.9
let formatterLowerBreakPoint = 0.000000001
let maxInput = 9

let decimalFormatter = NumberFormatter()
decimalFormatter.numberStyle = .decimal
decimalFormatter.groupingSeparator = ","
decimalFormatter.maximumIntegerDigits = maxInput
decimalFormatter.maximumSignificantDigits = maxInput + 1

let number = 0.005200000000000001

if abs(number) < formatterUpperBreakPoint && abs(number) > formatterLowerBreakPoint {
    print(decimalFormatter.string(from: NSNumber(value: number)) ?? "0") // result 0.0052
}
0 голосов
/ 01 августа 2020

Ответ состоит в том, чтобы использовать Decimal вместо Double или Float.

Убедитесь, что вычисление выполняется также между десятичными знаками, что означает, что вы не должны пытаться выполнить вычисление между двумя двойными , и преобразовать результат в Decimal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...