C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??相关的知识,希望对你有一定的参考价值。

比如 3.145输出3.15
3.196输出3.2
3.00输出3

可以通过sprintf函数实现数字四舍五入转字符串,通过处理字符串,实现所需功能,具体代码,

#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 加个0.5再取整数,如:1.4 0.5取整1;1.5 0.5取整2。

以上是关于C语言如何实现输出浮点数小数点两位(四舍五入法),但若小数点最后位为零则舍去??的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何让输出结果精确到两位小数

C语言,一个浮点数,怎么四舍五入保留到个位数

请问java提供啥方法实现将一个浮点数,四舍五入只保留小数点后两位

c语言中保留两位小数如何写?

C语言中如何对浮点数进行四舍五入?

c语言中浮点数四舍五入 。 保留一个浮点数小数点后的6位,第3位要四舍五入。如 1.1234.567到1234.570000