首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中的float的round()

C++中的float的round()
EN

Stack Overflow用户
提问于 2009-01-28 06:06:30
回答 21查看 413.1K关注 0票数 244

我需要一个简单的浮点四舍五入函数,因此:

代码语言:javascript
运行
复制
double round(double);

round(0.1) = 0
round(-0.1) = 0
round(-0.9) = -1

我可以在math.h中找到ceil()floor() --但round()找不到。

它是以另一个名称出现在标准C++库中,还是丢失了??

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2012-06-19 21:23:09

根据http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf的说法,它可以从cmath中的C++11获得。

代码语言:javascript
运行
复制
#include <cmath>
#include <iostream>

int main(int argc, char** argv) {
  std::cout << "round(0.5):\t" << round(0.5) << std::endl;
  std::cout << "round(-0.5):\t" << round(-0.5) << std::endl;
  std::cout << "round(1.4):\t" << round(1.4) << std::endl;
  std::cout << "round(-1.4):\t" << round(-1.4) << std::endl;
  std::cout << "round(1.6):\t" << round(1.6) << std::endl;
  std::cout << "round(-1.6):\t" << round(-1.6) << std::endl;
  return 0;
}

输出:

代码语言:javascript
运行
复制
round(0.5):  1
round(-0.5): -1
round(1.4):  1
round(-1.4): -1
round(1.6):  2
round(-1.6): -2
票数 50
EN

Stack Overflow用户

发布于 2009-01-28 06:10:29

在C++98标准库中没有round()。不过,你也可以自己写一个。下面是round-half-up的一个实现

代码语言:javascript
运行
复制
double round(double d)
{
  return floor(d + 0.5);
}

在C++98标准库中没有round函数的可能原因是它实际上可以以不同的方式实现。上面是一种常见的方法,但也有其他方法,如round-to-even,它的偏差较小,如果您要进行大量舍入,通常会更好;尽管实现起来有点复杂。

票数 144
EN

Stack Overflow用户

发布于 2011-05-02 00:19:31

Boost提供了一组简单的舍入函数。

代码语言:javascript
运行
复制
#include <boost/math/special_functions/round.hpp>

double a = boost::math::round(1.5); // Yields 2.0
int b = boost::math::iround(1.5); // Yields 2 as an integer

有关详细信息,请参阅Boost documentation

编辑:从C++11开始,就有了std::round, std::lround, and std::llround

票数 96
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/485525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档