c语言 有效数字计算

要算出单精度浮点型数m=67/3,系统默认保留6位有效数字,但是要求m保留3位有效数字,即m=22.333000该怎么搞,不要求输出,不是“%。3f”。如果是1,2,4,5位有效数字又怎么搞??哪位高手告诉我啊!!
是系统保留3位有效数字,不是单纯的输出3位有效数字。现在我已经知道了2~5位有效数字是怎么弄的。
2位是:设n=67,m=(float)(n*100/3)/100;则printf("%f",m);输出的数是22.330000。
3~5位则是把100改为1000,10000等。但还要把n弄成long型,不然要溢出。但我不知道怎么保留一位有效数字,哪位高手能解答啊?只要对我肯定给分。

第1个回答  2009-09-02
两个整数 a / b 保留小数点后3位有效数字可以 a* 1000 / b 得到的结果就是要的结果的1000倍,如果你要打印可以在适当地方加上小数点

你所谓“知道了”的办法也很有问题。 如果你是计算当中确实需要只保留小数点后n位, 那么你应该始终用定点数计算, 而不是用浮点数。 尤其float型精度比较低, 你这样的结果很可能会差一点点
第2个回答  2009-09-01
如题,m=22.333000
输出保留3位有效数字
%3.1f 3是这个数的总长度 .1是小数点后的位数
2位
%2.0f .0就是说没有小数点
1位
我不太了解,22怎么变为2,只有2e1可以表示
4位5位同理
%4.2f %5.3f

系统保留??我不明白
如果自己不加特定的语句
C语言编译系统都是统一默认小数点后6位数字
目前为止,我不知道系统可以自动默认有效数字的

参考资料:如果您的回答是从其他地方引用,请表明出处

第3个回答  2009-09-01
//看这样满足需求否?
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i=0;
char str[32] = {0};
float m = (float)67/3;
char *s = NULL;

sprintf(str, "%f", m);
s = str;
while (*s!='.') s++;
for (i=0; i<4; i++) s++;
while (*s!='\0') *s++='0';

m = (float)atof(str);
printf("m=%f\n", m);
}
相似回答