在c中使用round()函数

Mat*_*ana 8 c rounding

我对round()C中的功能有点困惑.

首先,男人说:

SYNOPSIS
   #include <math.h>
   double round(double x);

RETURN VALUE
   These functions return the rounded integer value.
   If x is integral, +0, -0, NaN, or infinite, x itself is returned.
Run Code Online (Sandbox Code Playgroud)

返回值是double/ float或int?

第二,我创建了一个第一轮的函数,然后转换为int.后来我的代码我用它作为比较双打的意思

int tointn(double in,int n)
{
    int i = 0;
    i = (int)round(in*pow(10,n));
    return i;
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中,这个功能显然不稳定.这里有冗余吗?嗯......我不只是寻找答案,而是更好地理解这个问题.

dea*_*ndi 5

手册页中的措辞意味着从字面上理解,这是数学意义上的.措辞"x是整数"意味着x是Z的元素,而不是x具有数据类型int.

浇铸double到int可能是危险的,因为最大的任意整数值,double可以保持为2 ^ 52(假定一个IEEE 754相符binary64),一个最大值int能容纳可能是较小的(它主要是32位上32位体系结构和还某些64位架构上的32位).

如果你只需要10的权力,你可以自己用这个小程序测试它:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
  int i;
  for(i = 0;i < 26;i++){
    printf("%d:\t%.2f\t%d\n",i, pow(10,i), (int)pow(10,i));
  }
  exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

而不是转换你应该使用返回适当的整数数据类型的函数,例如:lround(3).