【问题标题】:Why does .5 become 1.0 when rounding? Shouldn't it be 0.5?为什么四舍五入时 0.5 变成 1.0?不应该是0.5吗?
【发布时间】:2020-08-04 07:32:10
【问题描述】:

我正在努力学习 C++。 我正在使用 Mac xCode v. 11.4.1 在 MacBook Pro(13 英寸,2012 年中)上 处理器:2.9 GHz 双核 Intel Core i7 内存:8GB

while (c < .9)
{
    std::cin >> c;
    std::cout << "\nc = " << c << '\n';
    array.push_back(c);
    c = round ((c *10)/10);
    std::cout << "After rounding, c = " << c << '\n';
}
std::cout << "\nSize of the vector \'array\' = " << array.size() << '\n';
for (int i = 0; i < array.size(); i ++ )
{
    std::cout << "\narray[" << i << "] = " << array[i] << std::endl;
}

我的结果:

.1

c = 0.1
After rounding, c = 0
.2

c = 0.2
After rounding, c = 0
.3

c = 0.3
After rounding, c = 0
.4

c = 0.4
After rounding, c = 0
.5

c = 0.5
After rounding, c = 1

Size of the vector 'array' = 5

array[0] = 0.1

array[1] = 0.2

array[2] = 0.3

array[3] = 0.4

array[4] = 0.5
Program ended with exit code: 0

【问题讨论】:

  • 你的意思是round(c *10)/10
  • @AlanBirtles 是的,我只是在想同样的事情..
  • 顺便说一句,您的round 打印非整数值如何?请更正代码中的拼写错误!
  • @AlanBirtles 是的,很抱歉...实际上对修复该部分的问题进行了编辑!早些时候,控制台未格式化,因此它看起来像 0.2 和 0.3 而不是 0 \n .2 和 0 \n .3
  • 是的。轮(c * 10)/ 10。我认为那轮 ((10*10/10); 会根据括号做同样的事情。我错了吗?

标签: c++ arrays xcode


【解决方案1】:

std::round 就是这样定义的。

计算最接近 arg 的整数值(以浮点格式),从零开始舍入一半的情况,而不管当前的舍入模式。

您可能想看看std::floorstd::ceil,因为您似乎期待这样的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2014-06-20
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多