我对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)
在我的测试中,这个功能显然不稳定.这里有冗余吗?嗯......我不只是寻找答案,而是更好地理解这个问题.
手册页中的措辞意味着从字面上理解,这是数学意义上的.措辞"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).
| 归档时间: |
|
| 查看次数: |
9859 次 |
| 最近记录: |