我试图通过之前回答的问题来解决这个问题,例如Conversion from string to float changes the number,但我没有成功。
在我的代码中,我带了一个充满''字符的字符串,并使用stringstream将其转换为float。它工作正常(给我一个零值漂浮),直到我在那之后进行另一次转换。之后执行转换时,先前转换的浮点数中存储的值不为零,而是4.57048e-41。我希望以下代码能更清楚地解释我的问题。
我开始时:
std::stringstream ss;
float a;
float b;
for(int i=0; i<LIM; ++i){
//some other conversions using same stringstream
//clearing stringstream
ss.str( std::string() );
ss.clear();
ss << str1; //string full of empty spaces, length of 5
ss >> a;
std::cout << a;//prints zero
}
这很好用,但当我把它改成
时std::stringstream ss;
float a;
float b;
for(int i=0; i<LIM; ++i){
//some other conversions using same stringstream
//clearing stringstream
ss.str( std::string() );
ss.clear();
ss << str1; //string full of empty spaces, length of 5
ss >> a;
std::cout << a;//prints 4.57048e-41
ss.str ( std::string() );
ss.clear();
ss << str2; //another string full of empty spaces, length of 5
ss >> b;
std::cout << b;//prints zero
}
我正在使用带有以下标志的gcc 4.6.3: -o2 -Wall -Wextra -ansi -pedantic
任何形式的帮助将不胜感激,但我不愿意使用双打。
答案 0 :(得分:2)
如果转换失败,则不会更改目标值。在您的情况下,它仍然具有其原始的未初始化值;所以打印它会产生垃圾或其他未定义的行为。
您应该检查转换是否成功:
if (!(ss >> a)) {
a = 0; // or handle the failure
}
或使用C ++ 11中的std::stof
或boost::lexical_cast
之类的转换函数,它们会指示转换失败。 (或者,如评论中所述,如果您不需要检测失败,只需将其设置为零即可开始。)