首页 > 解决方案 > 在C ++中将字符串转换为没有科学记数法的double

问题描述

我有一个字符串变量,想在没有任何科学记数法的情况下将其转换为双精度。我尝试使用std::stod,但这不起作用。

std::stringstream timestamp;
timestamp << t_val;
string test = timestamp.str();
cout << test << endl; // this gives 1506836639.96
double d = std::stod(test);
cout << d << endl; // This gives 1.50684e+09 instead of 1506836639.96

我尝试使用setprecisionfixed但无法将结果存储到变量中。有没有办法可以将test(1506836639.96) 的值存储为双精度值?

标签: c++stringdoubleprecisionscientific-notation

解决方案


科学记数法与std::cout,而不是值的存储方式有关,因此您必须std::fixed在打印值之前使用:

std::cout << std::fixed << std::setprecision(2) << d << std::endl;

正如您在演示中看到的那样,这很好用,它也应该适合您。

正如@goodvibration 所评论 std::to_string的那样,它也可以工作,但在这种情况下,无法以简单的方式重新定义默认数字或小数位。

std::cout << std::to_string(d) << std::endl;

现场演示


推荐阅读