科学记数法中字符串到双精度的转换
C++ String to double conversion in scientific notation
如果字符串是科学格式,我想将给定字符串转换为双精度,而不将值转换为十进制。
即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
相关文章:
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 在 c++ 中从双精度转换为字符串
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- C++,遇到将双精度转换为整数的问题
- 在C++中将双精度转换为intptr_t
- 将大双精度转换为科学记数法以用作字符串?
- 了解双精度转换与整数转换中的整数与截断关系
- 将 OLE 自动化日期 (OADate) 双精度转换为结构 tm,而不使用 VariantTime到SystemTime
- 无法在赋值中将"双精度 (*)[4]"转换为"双精度**"
- 将大双精度转换为无符号 int 期间堆栈损坏
- 将双精度转换为本地8位
- 警告从"双精度"转换为"int"
- 如何将双精度转换为浮点指针
- 将双精度转换为整数时出错
- 使用并集将双精度转换为十六进制再转换为双精度
- 是否有可以将每个双精度转换为唯一uint64_t,保持精度和顺序的功能?(为什么我找不到?
- 使用定点表示法将双精度转换为字符串,没有尾随零和机智的冲刺
- 在C++中将双精度转换为字符*/字符串
- 无法将双精度 [] [] 转换为双精度 **