铸造大 NSInteger 浮动问题

Casting big NSInteger to float issue

1) 定义大 NSInteger
2) 转换为 float
3) 日志浮动
4)每次都变成小一点的数字???

NSInteger val = 485935336;
float val_float = (float)val;
NSLog(@"%f", val_float); //logs 485935328, not 485935336

知道为什么吗?

知道为什么吗?当然。 float 有大约六位数的精度。 double 有 15 位精度,这就是为什么你应该总是使用 double 除非你能给出一个很好的理由。你会遇到同样的问题,但前提是数字要大得多。