C ++将small double转换为string并返回double

时间:2016-09-22 20:07:11

标签: c++

我在尝试将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没有区别。

0 个答案:

没有答案