我从键盘捕获输入并放入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个输出,原始输入并转换。 有时结果并不相同。
拳头框架
第二帧
答案 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"
的结果转换为double
(123.0999999999999943
)加入123.0
。