当前位置: 首页 > 知识库问答 >
问题:

在C中创建舍入(浮点)函数时出错

裴华荣
2023-03-14

我试图编写一个round_up函数,将浮点数转换为整数,但是我获取小数位数的方法似乎有错误(浮点数%1的剩余部分)。如果浮点数是4.4,我希望将其转换为4;如果是4.5,我希望将其转换为5。错误消息:错误:无效的操作数到二进制%(有'浮动'和'int')

int round_up(float x)
{
    int remainder;
    int ret_whole_num;

    ret_whole_num = x/1;
    remainder = x % 1.0;   /* this causes errors */

    if (remainder > 5) 
        return ret_whole_num += 1;

    return ret_whole_num;
}

共有2个答案

翁宏茂
2023-03-14

试试这个:

int round_up(float x)
{
    if ( (int) x == x ) return x;
    else return x + 1;
}
漆雕伟志
2023-03-14

这样做:

int round_zero_digits(float x)
{
  return x + 0.5;
}

或更一般的:

#include <math.h> /* for pow()  */

...

float round_n_digits(float x, unsigned int n)
{
  x *= pow(10., n);

  x = (int) (x + 0.5);

  while (n--)
  {
    x /=10.;
  }

  return x;
}

round\u n\u位(x,0)相当于round\u零位(x)

更新(不使用mathlib):

float round_n_digits(float x, unsigned int n)
{
  unsigned int n_save = n;

  while (n--)
  {
    x *= 10.;
  }

  x = (int) (x + 0.5);

  while (n_save--)
  {
    x /= 10.;
  }

  return x;
}

更新^2(纯C'ish方式):

#define ROUND_ZERO_DIGITS(x) ((int) ((x) + 0.5))

float round_n_digits(float x, unsigned int n)
{
  unsigned int n_save = n;

  while (n--)
  {
    x *= 10.;
  }

  x = ROUND_ZERO_DIGITS(x);

  while (n_save--)
  {
    x /= 10.;
  }

  return x;
}

函数的宏版本为ROUND\u ZERO\u DIGITS()

 类似资料:
  • 我有一个关于PostgreSQL 9.2中浮点数的新手问题。 有没有直接舍入浮点数的函数,即不需要先将数字转换为数字类型? 另外,我想知道是否有一个函数可以用任意的度量单位进行取整,例如精确到0.05? 首先将数字转换为十进制形式时,以下查询工作正常: 然而,我真正想要实现的是以下几点: 这当前给了我以下错误: 谢啦

  • 问题内容: 我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少和的结果。在调查中,我注意到以下Python代码: 生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本: 而且我看不到发生这种舍入错误的

  • 问题内容: 我面临该功能的奇怪行为: 此代码打印: 我希望浮动值总是四舍五入,但是取整到最接近的偶数。 为什么会出现这种行为?获得正确结果的最佳方法是什么? 我尝试使用,但结果是相同的。 问题答案: “ 数字类型” 部分明确记录了此行为: x 四舍五入为n位数字,四舍五入为偶数。如果省略n,则默认为0。 注意 四舍五入到一半 。这也被称为 银行家四舍五入 ; 通过四舍五入到最接近的 偶数, 您可以

  • 问题内容: 有没有办法将python浮点数舍入为x小数?例如: 我已经找到了修剪/截断它们的方法(66.666666666-> 66.6666),但是不是圆形的(66.666666666-> 66.6667)。 问题答案: 使用内置功能: 帮助: round(number [,ndigits])->浮点数 将数字四舍五入到给定的精度(以十进制数字表示)(默认为0位数)。这总是返回一个浮点数。精度可

  • 我正在用Java开发一个时间关键型算法,因此没有使用。为了处理舍入误差,我设置了一个误差上限,在这个上限之下,不同的浮点数被认为是完全相同的。现在的问题是,这个界限应该是什么?或者换句话说,当对浮点数(浮点数加、减、乘、除)执行计算操作时,可能出现的最大舍入误差是什么? 通过我做的一个实验,似乎的范围就足够了。 PS:这个问题与语言无关。 编辑:我使用的是数据类型。这些数字是通过的方法生成的。 编

  • 问题内容: 我期望的是0.313而不是0.312,为什么会这样呢?还有其他方法可以用来获得0.313吗? 谢谢 问题答案: Python 3使用舍入到偶数方法根据IEEE 754标准进行舍入。 如果您想采用另一种方式取整,则只需手动实施即可: 用法示例: 注意: 在python2中,舍入总是远离零,而在python3中,它舍入为偶数。(例如,请参见功能文档中的2.7和3.3之间的区别)。