C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??相关的知识,希望对你有一定的参考价值。
比如 3.145输出3.15
3.196输出3.2
3.00输出3
#include <stdio.h>
int main(int argc, char *argv[])
char buffer[40];//存储float数据
float fnum=12.396;//待测试数据
sprintf(buffer,"%.2f",fnum);//四舍五入转化为字符串
int i=0;
for(;*(buffer+i)!='.';i++);//统计小数点的位置
if(*(buffer+i+2)=='0')//处理小数点后第二位字符,如果为0,替换为'\0'
*(buffer+i+2)='\0';
printf("四舍五入后,数据变为:%s\n,",buffer);
return 0;
float 为单精度浮点型数据,在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供7位有效数字。建议输入采用字符串形式,这样统计不会出偏差,使用数字时,使用double atof( const char *str )函数转换;如果使用数字,系统会自动补0的,与实际期望不符。 参考技术A #include<stdio.h>
mian()
float n;
float num1,num2;
printf("请输入一个小数:");
scanf("%f",&n);
num1=(int)(n*100+0.5);
int i,j;
i=num1%10;
num2=mum1/10;
j=mum2%10;
if(i==0 && j==0)
printf("/n四舍五入后为:%d",(int)num1);
else
printf("/n四舍五入后为:%.2f",num1);
追问
请问要是小数点后的位数不是两位,可以人为指定保留小数点后的位数,比如小数点后3位,4位,且格式同上要求该怎么实现呢?
追答如果要认为指定小数点后面的位数的话,你就自己加一个判断语句,看需要保留到第几位,用if语句控制,基本的思路还是我程序里面写的内容。
本回答被提问者采纳 参考技术B 要对某个浮点数比如x保留到小数点后两位,可以将x乘以100,变成对这个数进行四舍五入到个位。double f(double x)
double j = (x>=0?1.0:-1.0); //j是符号
return int(abs(x)*100+0.5)/100.0*j; //进行四舍五入,注意考虑正负号
参考技术C 把浮点数作为字符串输入,再比较最后一位是否为零,若为零则看倒数第二位;否则看是否大于等于5,若是则将倒数第二位加一并判断,否则直接舍去最后一位。最后输出修改后的字符串。追问
这种办法试过了,太麻烦了,有没有有技巧性一点的
参考技术D %.nf(%.nlf)看你要输出多少位小数,n就为多少追问
你这个方法不是四舍五入法,其次它也不能过滤最后位为零的位
C语言中如何对浮点数进行四舍五入?
据说%.3f是可以,但我自己测试时不行......
如果不行的话,请问一般怎么做???
C语言中对于浮点数输出的四舍五入是自动进行的。在浮点数的有效位数范围内,当要求保留小数点后n位时,系统会自动根据第n+1的值自动进行四舍五入操作。以下代码可以验证:
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"
int main(void)
double pi=3.141592653589793;
printf("%.15f\\n",pi);
printf("%.3f\\n",pi);//保留3位小数,因第4位是5而进位
printf("%.5f\\n",pi);//保留5位小数,因第6位是2而舍弃
return 0;
输出是:
3.141592653589793
3.142
3.14159
参考技术A %.nf,其中n是字面常量,功能是输到小数点后面的第n位,第n + 1位“四舍五入”。下面是在VC++ 6.0环境下的测试结果。/*
0.234562
0.235
0.2346
0.23456
Press any key to continue
*/
#include <stdio.h>
int main()
float f = 0.2345623f;
printf("%f\n",f);
printf("%.3f\n",f);
printf("%.4f\n",f);
printf("%.5f\n",f);
return 0;本回答被提问者采纳 参考技术B %.3f 的意思是输入小数点之前的三位数,比如说: 12.1234 会输出:12.123,
0.1236会输出:0.123 。之后的数字会被直接无语!
你可以用下面的方法(不过这个方法只适合正数,负数就不行了)
float a = 1.1235; //保留到小数点后三位
float b =(int)((a * 1000) + 0.5) / 1000.0;
//output b = 1.124;追问
好奇怪,这次又可以了,上次是输出2个2.34。。。。
以上是关于C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??的主要内容,如果未能解决你的问题,请参考以下文章
请问java提供啥方法实现将一个浮点数,四舍五入只保留小数点后两位
c语言中浮点数四舍五入 。 保留一个浮点数小数点后的6位,第3位要四舍五入。如 1.1234.567到1234.570000