tbox icon indicating copy to clipboard operation
tbox copied to clipboard

tb_string_cstrfcat 输出浮点数Bug.

Open wzy2687 opened this issue 5 years ago • 2 comments

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

wzy2687 avatar Feb 04 '20 02:02 wzy2687

你这个数本身精度已经完全超过64bits了, 64bits顶多表示到9223372036854775808,所以这里的数,在编译的时候,编译器给处理成 2.318931208301238e30 来表示了

即使printf显示的 2318931208301238 [007236648763392.000000] 也就是前面一部分是正确的,后面的精度也是有损失的。

不过目前tbox的浮点解码算法确实是有问题的,对于超过64bits必须采用科学表示法的数值,解码时候处理的并不可靠,这块如果要支持上,可能要重构下整个浮点解码算法才行。这块可能要花点时间了,等之后时间有空余了,我重构改进下这块。

目前只能显示64bits以内的浮点数,另外%e目前tbox里面也是没有完全支持的,直接转给%f去处理了

总之,目前tbox不支持科学技术法的浮点数解码,等后面有时间的时候,我可以看看能否加上支持

waruqi avatar Feb 04 '20 08:02 waruqi

收到, 我先绕过.

wzy2687 avatar Feb 04 '20 09:02 wzy2687