let amount:Float = 2.235
print("\(roundf(self.amountTax * 100)/100)")
возвращает 2.23Swift не roundf работает со значением флоат
, но она должна быть 2,24
let amount:Float = 2.235
print("\(roundf(self.amountTax * 100)/100)")
возвращает 2.23Swift не roundf работает со значением флоат
, но она должна быть 2,24
В результате 2.23
, потому что amount * 100
является 223.5
и округление, что не является 223
(потому что 2.235
вероятно, нет точное изображение, но что-то вроде 2.234999999999
), и делится на 100, это приводит к 2.23
.
Вы можете использовать ceilf
помазание вместо:
print("(ceilf(amount * 100)/100)")
'223.5' имеет точное представление как Float, но' 2.235' не имеет. –
, но если сумма составляет "1.4312", ее возврат 1.44, для нее должно быть 1.43 для двух знаков после запятой – Ranjan
Try 'печать (amount.debugDescription)', и вы увидите, проблема ... –
Также посмотрите на [Является ли математика с плавающей запятой?] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) и [Что должен знать каждый компьютерный ученый Арифметика с плавающей запятой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). –