【问题标题】:Rounding up and down a number C++向上和向下舍入一个数字 C++
【发布时间】:2020-04-20 00:46:19
【问题描述】:

我试图让我的程序分别向上和向下舍入一个数字。

例如,如果数字是3.6,我的程序假设将最接近的数字四舍五入,如果数字是3.4,它将向下舍入为3。

我尝试使用 ceil 库来获取 3 个项目的平均值。

results = ceil((marks1 + marks2 + marks3)/3)

但是,ceil 只会将数字向下舍入,但不会向上滚动。

我偶然发现了一种算法

var roundedVal = Math.round(origVal*20)/20;

但我仍然想不出解决某些问题的公式。

【问题讨论】:

  • 您没有上下四舍五入。你只是四舍五入。
  • Math.round() 是什么?是 C++ 还是 Java?
  • “但是,ceil 只会将数字向下舍入...”当然,您的意思是 ceil 只会向上舍入?
  • 什么是var? Math.round 是什么?
  • @TeoChuenWeiBryan:这是整数数学。 (1 + 3 + 6) / 3 将准确返回 3(因为所有数字都是整数),而 3 的 ceil、floor 和 round 将是 3。请改用(1.0 + 3.0 + 6.0) / 3.0。

标签: c++ cmath ceil


【解决方案1】:
std::ceil 

四舍五入到最接近的整数

std::floor 

四舍五入到最接近的整数

std::round 

执行您期望的行为

如果这不能满足您的需求,请给出一个带数字的用例!

【讨论】:

  • @Teo Chuen Wei Bryan (ceil(1 + 3 + 6)/3) 应该是 ceil((1 + 3 + 6)/3.0)
  • 应该注意的是,我们在这里谈论的是<cmath>,因为我们使用的是C++,它很重要。
【解决方案2】:

你需要的函数叫做round,信不信由你。

ceil 向上取整,顺便说一句。也就是说,最接近的较大整数。 floor 向下取整。

【讨论】:

  • 我相信他们的工作方式是一样的。我之前尝试过round 和ceil。
  • en.cppreference.com/w/cpp/numeric/math/round "计算最接近 arg 的整数值(浮点格式),从零开始舍入一半大小写,无论当前舍入模式如何。" floor 应该可以解决问题。
  • @TeoChuenWeiBryan 你在你的两个例子上都试过了吗?
  • @Code-Apprentice 是的。我用这种方式尝试过(ceil(1 + 3 + 6)/3),但它似乎仍然把我的数字四舍五入而不是向上。
  • @TeoChuenWeiBryan 为什么要这么多数学。用纯数字测试这两个函数以查看不同的行为。
【解决方案3】:

您不需要在 C 或 C++ 中舍入的函数。你可以使用一个简单的技巧。添加 0.5,然后转换为整数。无论如何,这可能都是全面的。

double d = 3.1415;
double d2 = 4.7;
int i1 = (int)(d + 0.5);
int i2 = (int)(d2 + 0.5);

i1是3,i2是5,你可以自己验证。

【讨论】:

    【解决方案4】:

    std::round 可能就是您要找的那个。但是,请记住它返回一个浮点数。您可能想尝试lround 或llround 以获得 long 或 long long (C++ 11) 的结果。

    http://en.cppreference.com/w/cpp/numeric/math/round

    【讨论】:

      【解决方案5】:

      在 c++ 中,通过包含 cmath 库,我们可以使用各种函数来向上或向下舍入值。

      std::trunc
      

      这只是截断小数部分,即小数点后的数字,不管小数是什么。

      std::ceil
      

      这用于四舍五入到最接近的整数值。

      std::floor
      

      这用于向下舍入到最接近的整数值。

      std::round
      

      这将舍入到最接近的整数值,即可以向上舍入或向下舍入。

      【讨论】:

      • 另一个答案已经提到了这些功能(除了trunc,OP 没有询问)。这个答案似乎没有添加任何新信息...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多