【问题标题】:C++ String to double conversion in scientific notationC++ 字符串到科学计数法的双重转换
【发布时间】:2015-12-26 16:02:15
【问题描述】:

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

即 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 是相同的编号
  • 是的 12.3 和 1.23e1 是相同的,但我想将其保留为 1.23e1 以用于进一步操作。那么是否可以将字符串 1.23e1 转换为浮点数而不转换为十进制??
  • 12.3 和 1.23e1 是一样的。在操作中使用 first 或 second 有什么区别?无...它的双精度表示是相同的,只有人类在屏幕上的表示不同...

标签: c++ c++11 c++14


【解决方案1】:

您将值与其表示混淆了。

12.3、1.23e1、0.123e2 和 123.0e-1 都是相同值的表示。它们也将以完全相同的表示形式存储,无论您输入哪个。 IEEE-754 格式定义了值如何以双精度浮点格式表示。这是一种二进制格式,看起来一点也不像“1.23e1”。

因此,请忽略您的输入上的任何感知表示问题。您需要做的就是确保 输出表示(即,将双精度转换为值的字符串表示时)采用您想要的格式。为此,请查看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

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 2019-07-09
    • 1970-01-01
    • 2017-12-24
    • 2015-03-31
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多