2016-11-08 6 views
0
let amount:Float = 2.235 
print("\(roundf(self.amountTax * 100)/100)") 

возвращает 2.23Swift не roundf работает со значением флоат

, но она должна быть 2,24

+1

Try 'печать (amount.debugDescription)', и вы увидите, проблема ... –

+2

Также посмотрите на [Является ли математика с плавающей запятой?] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) и [Что должен знать каждый компьютерный ученый Арифметика с плавающей запятой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). –

ответ

1

В результате 2.23, потому что amount * 100 является 223.5 и округление, что не является 223 (потому что 2.235 вероятно, нет точное изображение, но что-то вроде 2.234999999999), и делится на 100, это приводит к 2.23.

Вы можете использовать ceilf помазание вместо:

print("(ceilf(amount * 100)/100)") 

Этот результат площадка может дать вам больше понимания: enter image description here

+1

'223.5' имеет точное представление как Float, но' 2.235' не имеет. –

+0

, но если сумма составляет "1.4312", ее возврат 1.44, для нее должно быть 1.43 для двух знаков после запятой – Ranjan