tbox
tbox copied to clipboard
tb_string_cstrfcat 输出浮点数Bug.
tb_string_cstrfcat 输出浮点数Bug.
输出浮点数,显示有乱码. 代码如下
double t_HUGE_VAL = HUGE_VAL;
double t_HUGE_VALF = HUGE_VALF;
double t_HUGE_VALL = HUGE_VALL;
double t_NAN = NAN;
double x = 2318931208301238129083120832190.12212;
printf("%lf\n",t_HUGE_VALF);
printf("%lf\n",t_HUGE_VAL);
printf("%lf\n",t_HUGE_VALL);
printf("%lf\n",t_NAN);
printf("%lf\n",x);
printf("%.8e\n",x);
tb_string_t a_str;
tb_string_init(&a_str);
tb_string_cstrfcat(&a_str, "%lf,%lf,%lf,%lf %lf; %.8e\n", t_HUGE_VALF, t_HUGE_VAL, t_HUGE_VALL, t_NAN, x,x);
printf("%s",tb_string_cstr(&a_str));
tb_string_exit(&a_str);
输出
inf
inf
inf
nan
2318931208301238007236648763392.000000
2.31893121e+30
inf,inf,inf,nan '..--).0-*(+,))+(0(.000000; ./,),(-*,(.00000000
期待的结果
输出应该同printf 的输出相同.
错误信息
输出中出现了 ''..--).0-(+,))+(0(.000000; ./,),(-,(.00000000' 这样的乱码.
相关环境
gcc 7.2 ubuntu
你这个数本身精度已经完全超过64bits了, 64bits顶多表示到9223372036854775808,所以这里的数,在编译的时候,编译器给处理成 2.318931208301238e30 来表示了
即使printf显示的 2318931208301238 [007236648763392.000000] 也就是前面一部分是正确的,后面的精度也是有损失的。
不过目前tbox的浮点解码算法确实是有问题的,对于超过64bits必须采用科学表示法的数值,解码时候处理的并不可靠,这块如果要支持上,可能要重构下整个浮点解码算法才行。这块可能要花点时间了,等之后时间有空余了,我重构改进下这块。
目前只能显示64bits以内的浮点数,另外%e目前tbox里面也是没有完全支持的,直接转给%f去处理了
总之,目前tbox不支持科学技术法的浮点数解码,等后面有时间的时候,我可以看看能否加上支持
收到, 我先绕过.