g_ascii_dtostr ( )转换字符串的问题
最近在做一个项目,使用gtk+2.0和linux环境开发的,其中用了g_ascii_dtostr ( )将float浮点数转换为字符串,考虑精度问题,所以每个浮点数都有一个误差值,大小为0.000005,并取三位有效数字,但是当需要转换的值为0.0的时候,加上误差值后,本来期待转换结果为0,结果却显示了5.00,而且只取误差值的有效数字,请问有高手知道何解么?经过测试,对于g_ascii_dtostr ( )这个函数,只要是0.0000X(前面n个0)的浮点数,转换后只会显示X。怀疑这是不是g_ascii_dtostr ( )的bug来的?有更好的代替方法么? 直接用sprint 不行吗 试了下没有你所说的#include <stdio.h>
#include <glib.h>
#include <memory.h>
int main(int argc,char *argv[])
{
gdouble gd;
gd=0.0002;
gchar buf;
memset(buf,0,10);
g_ascii_dtostr(buf,10,gd);
printf("%s\\n",buf);
return 0;
}
输出为
0.0002000
回 zhangjin9989 的帖子
zhangjin9989:试了下没有你所说的#include <stdio.h>
#include <glib.h>
#include <memory.h>
....... (2012-04-29 20:48) images/back.gif
前面再加个0试试。 #include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
/** */
int main(int argc, char** argv)
{
gtk_set_locale ();
gtk_init (&argc, &argv);
int len=10;
float a = 0.0;
gchar textAllFlag;
a=0.55555555;
g_ascii_dtostr(textAllFlag,len,a);
printf("text:%s while a=%f\\n",textAllFlag,a);
a=0.05555555;
g_ascii_dtostr(textAllFlag,len,a);
printf("text:%s while a=%f\\n",textAllFlag,a);
a=0.00111111;
g_ascii_dtostr(textAllFlag,len,a);
printf("text:%s while a=%f\\n",textAllFlag,a);
a=0.00011111;
g_ascii_dtostr(textAllFlag,len,a);
printf("text:%s while a=%f\\n",textAllFlag,a);
a=0.00005555;
g_ascii_dtostr(textAllFlag,len,a);
printf("text:%s while a=%f\\n",textAllFlag,a);
a=0.00000555;
g_ascii_dtostr(textAllFlag,len,a);
printf("text:%s while a=%f\\n",textAllFlag,a);
a=0.00000055;
g_ascii_dtostr(textAllFlag,len,a);
printf("text:%s while a=%f\\n",textAllFlag,a);
return 0;
}
运行结果:
text:0.5555555 while a=0.555556
text:0.0555555 while a=0.055556
text:0.0011111 while a=0.001111
text:0.0001111 while a=0.000111
text:5.5550000 while a=0.000056
text:5.5499999 while a=0.000006
text:5.4999998 while a=0.000001
页:
[1]