sprintf类型转换,结果奇怪

时间:2015-01-27 11:39:33

标签: c++

我从键盘捕获输入并放入char

char input[64];

如果我直接在屏幕上输出结果,那么一切都好......

    font.Render((char*)input, input_size , result_coord2, result_space2, FTGL::RENDER_SIDE);

但是我想看看如果将char转换为double,然后返回会发生什么。

    double result = atof(input);
char temp[64] = {0};
sprintf(temp,"%16.16f",result);
FTPoint result_coord(x/2, y/2, 0);
FTPoint result_space(0, 0, 0);
font.FaceSize(22);
font.Render((char*)temp, input_size , result_coord, result_space, FTGL::RENDER_SIDE);

最后我在屏幕上有2个输出,原始输入并转换。 有时结果并不相同。

拳头框架

enter image description here

第二帧

enter image description here

1 个答案:

答案 0 :(得分:1)

为了更好地判断你问题的质量,这就是我在水晶球中瞥见的内容。

我将您的不可编辑代码转换为正确的MCVE

#include <stdio.h>
#include <stdlib.h>

void convert( char * input )
{
    double result = atof( input );
    printf( "%16.16f\n", result );
}

int main()
{
    convert( "123.1" );
    convert( "123.12" );
    return 0;
}

观察输出:

123.0999999999999943
123.1200000000000045

考虑到浮点表示中固有的accuracy problems,这是预期的。

我只能假设您正在使用的FTGL函数执行一些内部舍入(关闭)或截断输出,将转换"123.1"的结果转换为double123.0999999999999943)加入123.0

相关问题