本文目录一览:
c语言中有没有进行四舍五入的函数?
四舍五入算法:如果要求精确到小数点后面的第n位,则需要对第n+1位进行运算。方法是将该小数乘以10的n+1次方后加5,然后除以10并强制转换变量类型为长整型,再将该数除以10的n次方,同时强制转换类型为浮点型。
代码实现如下:
long t; /*定义长整型变量t*/
t=(h*10n+1+5)/10; /*对h进行操作,得到值浮点型,t取值时取整数部分。10n+1为要扩大的倍数*/
h=(float)t/10n; /*将t缩小10n倍,并转换成浮点型*/
C语言编程 、对输入的任意一个数按照四舍五入法取整?
#includestdio.h
int round1(float a)
{
return (int)(a+0.5);
}
int main()
{
float x;
printf("请输入一个浮点数:");
scanf("%f",x);
printf("四舍五入的结果是:%d",round1(x)) ;
return 0;
}
延展阅读:
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
c语言四舍五入怎么表示
要用C语言实现四舍五入,有一个很巧妙的方法,仅使用int i=(int)(a+0.5)即可。如果遇到有负数的情况,只需要将加号改为减号即可。
C语言中四舍五入这样表示:
inta=100.453627。
printf("%.1f",a+0.05);//四舍五入到十分位。
printf("%.2f",a+0.005);//四舍五入到百分位。
以此类推,对于十进制小数.5类型数(如0.5,11.5,18.5),即小数部分可以以2的负一次方来表示的数,这时计算机是可以“完美”的储存这个十进制小数字。而对于.6,.7,.8,.9与.4,.3,.1,.2,这类数字,计算机虽然无法“完美”的储存这些数字,在这样的情况下可以运用所谓的“+0.5的取整法”。
所谓加0.5的取整法就是运用在C语言中浮点型数强制转化为整形数时只会其保留整数,而不会进行四舍五入的计数法则。所以对于保留整数的小数来说,我们只需在其原来的基础上+0.5后再进行强制类型转换,就可以达到不会出错的四舍五入。
有的标准不存在C语言四舍五入:
C语言中的四舍五入在C98标准中,标准C函数库是没有关于四舍五入的函数的,到了C99标准才出现了ceil(),floor(),nearbyint(),round()之类丰富的取整函数。
现在使用的gcc都是C99标准了,而Windows下的VC(包括VS2008)还是C98标准,所以需要遵从严格格式,包括没有内联inline、没有单行注释//、变量要写在代码块的前头等等,最大的缺点就是没有那些函数的支持。
c语言中有没有进行四舍五入的函数
首先,这个问题的解决方案取决于我们所需要的转换方式:是截断转换还是舍入转换;另一方面,它基本与我们需要转换的浮点数类型无关──无论是 float 还是 double,甚至是 long double。
有时人们觉得一个浮点变量的值和一个整型变量的值可以完全一样地可表示,你可能相信 x 值为 100.0 时我们只要把它转换为整型就会得到整数 100。但在任何时候,你都不应依赖于期望一个浮点数的值能够与一个整型数的值完全相等,你真正所需要的可能是四舍五入。
截断转换的意思是抛弃所有的小数部分,例如 3.9 将被转换为 3,这种转换是 C 语言中将浮点数转换为整型数的默认方式,也就是说无论在什么时候,只要将浮点数转换为整型数,采用的都是这种方式。关于这种转换何时发生,有一些特殊的规定,这里我们仅指出赋值时所发生的转换,比如
i = x;
其中 i 是一个整型数,x 是一个浮点数。当然,在显式类型转换的情况下,这样的转换也会发生,比如
(int) x
舍入转换是指获取与给定浮点数最为接近的整型数,因此 3.9 应被转换为 4,这才是人们提出我们正在解决的这个问题时所真正需要的。对于舍入转换,我们没有直接的工具(比如运算符或者库函数),严格地说,舍入转换并非与 C 标准里所定义的转换在同一意义下的转换。
对于正的浮点数,最简单的四舍五入方法就是用这样的一个表达式
(long) (x+0.5)
但是如果表达式对负数有效的话会更好,即使在你看来负数的情况不会发生。这意味着你可以用一个条件表达式:
x = 0 ? (long)(x+0.5) : (long)(x-0.5)
这个表达式的返回值就是与浮点变量 x 的值最接近的整数值。
如果需要大量地使用舍入转换,则可以写这样的一个宏:
#define round(x) ((x)=0?(long)((x)+0.5):(long)((x)-0.5))
这可以在某种程度上使代码更具可读性。
注意到这样的转换会将 1.5 变为 2 但却将 -1.5 变为 -2,那么对于这样正好处于两个整数之间的浮点数,你可能需要做一些其它的处理,但这在实际当中并不十分重要。
需要小心的是,将一个浮点数转换为一个整型数可能导致上溢,但大多数的实现都没有进行相关的判断。用 long 替代 int 会给出一个更宽的范围(建议使用 long),但仍然比浮点数的范围要小得多。
如果效率不是至关重要的话,则可以定义这样的一个函数(而不是简单地写一个 #define),使你的程序更具鲁棒性:
long round(double x) {
assert(x = LONG_MIN-0.5);
assert(x = LONG_MAX+0.5);
if (x = 0)
return (long) (x+0.5);
return (long) (x-0.5);
}
如果在意效率的话,可以写这样一个宏
#define round(x) ((x) LONG_MIN-0.5 || (x) LONG_MAX+0.5 ?\
error() : ((x)=0?(long)((x)+0.5):(long)((x)-0.5))
这要求在程序中有 #include limits.h,并且有一个处理错误的函数 error,其返回值为 long 类型。