在C ++中将科学记数法转换为十进制

时间:2012-02-23 10:24:40

标签: c++ decimal scientific-notation

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

如果我有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,如果可以删除它们。

3 个答案:

答案 0 :(得分:4)

您可以使用std::setprecision

答案 1 :(得分: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";
}

答案 2 :(得分:0)

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