在平时编程的时候,经常会碰到浮点数和整数的转换,相对于精度损失来说,很多时候无意识的转换会碰到意想不到的结果,甚至产生严重的事故。
float time1 = 2.9;int time2 = int(time1);LOG(INFO) << "time2 " << time2;
输出结果
time2 2
可以看到使用int是直接向下取整,而不是四舍五入,四舍五入需要使用std::round()函数
int time3 = int(std::round(2.9));LOG(INFO) << "time3 " << time3;
输出结果
time3 3
所以写代码时最好不要用int类型转换,而是采用std::floor或者std::ceil明确指出是向下取整还是向上取整
int time4 = std::floor(time1);int time5 = std::ceil(time1);LOG(INFO) << "time4 " << time4 << ", time5 " << time5;
输出结果
time4 2, time5 3
浮点数不要用==直接比较大小,这样会因为极小的误差导致不相等,如果确实要比较,最好是采用如下方式
float time6 = 5.9999, time7 = 5.9999;if (std::abs(time6 - time7) < std::numeric_limits::epsilon()) LOG(INFO) << "time6 == time7";
整形不要和无符号整型进行比较
int time8 = -1;size_t time9 = 1;if (time8 < time9) LOG(INFO) << "time8 < time9";else LOG(INFO) << "time8 >= time9";
出人意料的输出
time8 >= time9
整形转换
留言与评论(共有 0 条评论) “” |