关于无符号整型和浮点数四舍五入容易引发错误的地方(原创)
NSMutableArray *ar = [[NSMutableArray alloc]init];
for (int i = 0; i<[ar count]-1; i++) {
NSLog(@"test:%d",i);
}
由于 [ar count] 返回为 无符号类型,[ar count]-1 将会为最大整数,此循环会一直循环而不会退出.
如果改成
for (int i = 0; i<(int)[ar count]-1; i++) {
则 不会进入循环。
int i = 5.9;
则不会四舍五入,i为5。
NSString *str = [NSString stringWithFormat:@"%.1f",5.39]; 四舍五入 @"5.4"
NSString *str = [NSString stringWithFormat:@"%.1f",5.9]; 四舍五入 @"6"
注意浮点数在存储时会有偏差,所以4.5在数据库表示可能是4.499999999 或者 4.500000001等
,因此 4.5 小数点后一位四舍五入为 4.4999 当成4.4 取整4. 4.500001取整为 4.5.
另外在无符号和有符号类型比较大小时,切记将类型转换为相同类型,当取值为负容易出现问题。