如果字符串是科学格式,我想将一个给定的字符串转换为double而不将该值转换为十进制。
即1.23e1应保存为1.23e1而不是12.3。
我检查了stringstream,strtod,boost :: lexical_cast等方法 但所有这些都将1.23e1转换为12.3。
有没有办法让1.23e1可以保存为1.23e1而不是12.3 ??
答案 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