Iphone 关于函数法之间的浮点参数传递

Iphone 关于函数法之间的浮点参数传递,iphone,Iphone,我在类文件中有一个函数方法。 像这样: -(NSArray*)getPayMoney:(NSUInteger)money month:(NSInteger)month rates:(float)rates; 当我从中传输速率值0.06时,在调试模式下,get rates为0.059999。 有人知道原因吗?这是计算机科学的基础-浮点表示法无法准确地表示所有十进制数。请做一些阅读: 底线:如果您使用的是货币值,请不要使用浮点类型。您将面临两个主要问题:第一,您无法始终准确地将货币值转换为浮

我在类文件中有一个函数方法。 像这样:

-(NSArray*)getPayMoney:(NSUInteger)money month:(NSInteger)month rates:(float)rates;
当我从中传输速率值0.06时,在调试模式下,get rates为0.059999。
有人知道原因吗?

这是计算机科学的基础-浮点表示法无法准确地表示所有十进制数。请做一些阅读:

底线:如果您使用的是货币值,请不要使用浮点类型。您将面临两个主要问题:第一,您无法始终准确地将货币值转换为浮点值并返回,第二,您可能存在舍入错误,从而在某些计算中给出错误的结果

您必须使用BCD或十进制类型以货币计算。苹果在可可粉中提供了直接支持:


如果您使用的是真正的货币,并且需要高精度,那么您应该使用
NSDecimalNumber
。作为用户,当浮动精度导致我们赔钱时,我们往往会生气,即使只是几美分;)