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

返回2.23斯威夫特roundf不是浮點值工作

,但它應該是2.24

+1

嘗試'打印(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 * 100223.5和該舍入爲223(因爲2.235可能沒有確切的表示形式,但類似於2.234999999999),除以100就會導致2.23

您可能需要使用ceilf油膏代替:

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

這個遊樂場的結果可能會給你更多的瞭解: enter image description here

+1

'223.5'具有精確的表示形式,但是'2.235'沒有。 –

+0

但如果金額爲「1.4312」,則返回1.44,則應爲1.43,即兩位小數 – Ranjan