Round()在C ++中哪里?
复制: round()for C ++中的float
我使用的VS2008,我已经包括math.h,但我仍然无法find一个循环的函数。 它存在吗?
我在谷歌上看到了一堆“添加0.5并投射到整数”的解决scheme。 这是最佳做法吗?
你可以使用C ++ 11的std::round()
。
如果你仍然坚持较老的标准,你可以使用std::floor()
,它总是四舍五入到较低的数字,而std::ceil()
总是四舍五入到较高的数字。
为了得到正常的四舍五入行为,你确实会使用floor(i + 0.5)
。
这种方式会给你负数的问题,解决这个问题的方法是使用ceil()作为负数:
double round(double number) { return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5); }
另一种更清洁但更耗费资源的方式是使用串stream和input/输出操纵器:
#include <iostream> #include <sstream> double round(double val, int precision) { std::stringstream s; s << std::setprecision(precision) << std::setiosflags(std::ios_base::fixed) << val; s >> val; return val; }
只有在资源不足和/或需要控制精度的情况下才使用第二种方法。
使用floor(num + 0.5)
不适用于负数。 在这种情况下,你需要使用ceil(num - 0.5)
。
double roundToNearest(double num) { return (num > 0.0) ? floor(num + 0.5) : ceil(num - 0.5); }
实际上Microsoft math.h中没有一个循环函数。
但是,您可以使用静态方法Math :: Round()来代替。
(根据您的项目types。)
我不知道这是不是最好的做法,但是使用0.5技术与floor()似乎是一条路。