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

时间:2015-09-29 08:38:24

标签: 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 ??

1 个答案:

答案 0 :(得分: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";

输出:

1.230000e+01

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

std::cout << std::scientific << std::setprecision(2) << a << "\n";

输出:

1.23e+01