我在尝试将double保存到字符串时遇到问题,然后再将该字符串转换回double。问题是字符串似乎只存储前6个小数位,所以当我的double太小时,存储的值是" 0.000000"因此当我将其转换回双倍时为0。
我写了一篇快速的可编译来证明这个问题:
#include <string>
#include <iostream>
int main ()
{
// Create a very small double
double initial_val = 2.9e-9 ;
// Convert the double to a string
std::string string_val = std::to_string(initial_val) ;
// Convert the string back to a double
double final_val = std::stod(string_val) ;
// Print out the result
std::cout << "initial_val: " << initial_val << std::endl;
std::cout << "string_val : " << string_val << std::endl;
std::cout << "final_val : " << final_val << std::endl;
std::cout << "difference : " << initial_val - final_val << std::endl;
return 0;
}
这给出了输出:
initial_val: 2.9e-09
string_val : 0.000000
final_val : 0
difference : 2.9e-09
有没有更好的方法将我的double转换为字符串,以便在将其转换回double时它仍然可用?不幸的是,字符串是我拥有的字符串,用于I类使用。
修改
Slava的评论解决了这个问题。将字符串保存为
std::stringstream stream ;
stream << initial_val ;
std::string string_val = stream.str() ;
导致initial_val和final_val没有区别。