扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
方法一:
为沅江等地区用户提供了全套网页设计制作服务,及沅江网站建设行业解决方案。主营业务为成都做网站、网站制作、成都外贸网站建设、沅江网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
#includestdio.h
int main()
{
double d1,d2,d3;
d1=-3.1415926;
d2=(int)(d1*10+0.5)*0.1;
printf("d1=%f,保留一位小数的结果为:%.1f\n",d1,d2);
d3=(int)(d1*1000+0.5)*0.001;
printf("d1=%f,保留三位小数的结果为:%.3f",d1,d3);
总结四舍五入保留n为小数
(int)(x*10的n次方+0.5)*10的负n次方;
其次这个方法对负数无效;如果非要用可以先取正数部分算,最后加上负号
}
方法二:
使用round()函数。
#include"stdio.h"
#include"math.h"
void main()
{
float x;
scanf("%f",x);
int y = round(x);
printf("%d",y);
}
扩展资料:
C语言编写注意事项:
1、%运算符不能应用与float或double类型。
2、char类型转换为int型时, 无法判断它是signed还是unsigned.这样其结果有可能为负数, 因此转换时尽量指定signed和unsigned限制符。
3、++i与i++不同之处: ++i是先+1在使用, i++是先使用i在递加1。
4、三元运算符"?:" 第一个表达式的括号不是必须的,但是由于三元表达式的优先级非常低,我们还是将第一个表达式用()括起便于阅读和理解。
5、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、没有单行注释//、变量要写在代码块的前头等等,最大的缺点就是没有那些函数的支持。
首先,这个问题的解决方案取决于我们所需要的转换方式:是截断转换还是舍入转换;另一方面,它基本与我们需要转换的浮点数类型无关──无论是 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 类型。
# incloud stdio
int main(void)
{
float a ;
scanf(“%f”,a);
a=(int)(a*1000+0.5)/1000.0;
printf (“%0.3f”,a);
return 0;
}
扩展资料:
其他方法实现四舍五入:
int myround(double indata,int precision,double * outdata)
{
long pre = 1,i;
for(i = 0; i precision; i ++)pre = pre * 10;
if(cy_FloatCompare(indata,0.00) 0)
* outdata =(int)((indata * pre)+0.5)/100.00;
else
* outdata =(int)((indata * pre)-0.5)/100.00;
return 0;
}
// cy_FloatCompare是浮点数与0比较的函数,假设它存在。返回值与strcmp相同。
float num=3.14159
float f;
f=((int)(num*10000+0.5))/10000.0;
过程如下 31415.9 +0.5 = 31416.4
取整 31416 然后除以10000.0
隐式转换为float 3.1416
c99 开始有 round() 函数处理 四舍5入。
函数原型:
double round (double x);
float roundf (float x);
long double roundl (long double x);
C++11 有 double round (T x);
----
低于c99 的可以自己写,例如: 绝对值+0.5,
绝对值函数原型:
double fabs (double x);
float fabs (float x);
long double fabs (long double x);
正数和负数的 四舍5入 有天花板和地板的 处理,由你自己选择(上靠,下靠) 。
天花板和地板函数原型:
double ceil (double x);
float ceil (float x);
long double ceil (long double x);double floor (double x);
float floor (float x);
long double floor (long double x);
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流