【问题标题】:Convert scientific notation to decimal in C++在 C++ 中将科学计数法转换为十进制
【发布时间】:2012-02-23 10:24:40
【问题描述】:

我希望能够在我的代码中的所有情况下输出十进制而不是科学的。

如果我有 122041e+08,那么我希望它显示为 122041000

如果我有 4.6342571e+06,那么我希望它显示为 4634257.1

...等等。

使用我的代码,4.6342571e+06 的输出是 4634257.100000

void conversion(double counts)
{
  std::ostringstream ss;
  ss << std::fixed << counts;
  std::cout << ss.str() << " MeV";
}

有人可以向我解释为什么它会在末尾添加 0 以及是否可以删除它们。

【问题讨论】:

    标签: c++ decimal scientific-notation


    【解决方案1】:

    您可以使用std::setprecision

    【讨论】:

    • ideone.com/5CmObK 见这里科学数通过使用std::fixed 而不是std::setprecision 转换为普通浮点数。我不声称我的观点是正确的,但我告诉你我观察到的。我是c++ 的新手;
    【解决方案2】:

    在您的输出字符串流中有一个名为precision 的方法。您可以使用它来调整逗号后的位数。它默认为 6,缺少的数字用 0 填充(因此名称固定)。为了实现4634257.1被显示,设置精度为1:

    void conversion(double counts)
    {
      std::ostringstream ss;
      ss.precision(1);
      ss << std::fixed << counts;
      std::cout << ss.str() << " MeV";
    }
    

    【讨论】:

      【解决方案3】:

      它添加零是因为您(在不知不觉中)要求它们。默认精度为 6,采用固定格式,表示小数点后 6 位(不管之前有多少位)。根据用于输出的格式,精度具有不同的含义。 (这听起来不太正交,但在实践中效果很好,一旦你知道会发生什么。)

      【讨论】:

        猜你喜欢
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 2012-11-29
        相关资源
        最近更新 更多