科学记数法中字符串到双精度的转换

C++ String to double conversion in scientific notation

本文关键字:双精度 转换 字符串      更新时间:2023-10-16

如果字符串是科学格式,我想将给定字符串转换为双精度,而不将值转换为十进制。

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

因此,忽略您的输入中的任何感知到的表示问题。你所需要做的就是确保输出表示(即当将双精度转换为值的字符串表示时)是你想要的格式。为此,请查看std::scientific:

double a = 12.3;
std::cout << std::scientific << a << "n";
输出:

1.230000e+01

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

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

1.23e+01