C++用科学记数法进行双重转换的字符串

-6 c++ c++11 c++14

如果字符串是科学格式,我想将一个给定的字符串转换为double而不将该值转换为十进制.

即1.23e1应保存为1.23e1而不是12.3.

我检查了stringstream,strtod,boost :: lexical_cast等方法,但所有这些方法都将1.23e1转换为12.3.

有没有办法使1.23e1可以保存为1.23e1而不是12.3 ??

And*_*rew 5

你把这个值与它的表示混淆了.

12.3,1.23e1,0.123e2和123.0e-1都是相同值的表示.它们也将以双重完全相同的表示形式存储,无论您输入哪一个.IEEE-754格式定义了如何以双精度浮点格式表示值.它是一种二进制格式,看起来不像"1.23e1".

因此,忽略输入中任何感知到的表示问题.您需要做的就是确保输出表示(即将double转换为值的字符串表示形式)采用您想要的格式.为此,请查看std :: scientific:

double a = 12.3;
std::cout << std::scientific << a << "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

1.230000e+01
Run Code Online (Sandbox Code Playgroud)

您还可以操纵精度以获得更多或更少的数字:

std::cout << std::scientific << std::setprecision(2) << a << "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

1.23e+01
Run Code Online (Sandbox Code Playgroud)