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