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

7

我希望我的代码在所有情况下都能以十进制而不是科学计数法输出。

如果我的数据为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个回答

6

1
请看这里 https://ideone.com/5CmObK ,科学计数法通过使用 std::fixed 转换为普通浮点数,而不是 std::setprecision。我不敢说我的方法是正确的,但我告诉你我观察到的情况。我是 c++ 的新手。 - Abhishek Mane

2

你的输出字符串流中有一个叫做precision的方法,你可以使用它来调整小数点后的位数。它默认为6,缺失的位数将会被0填充(因此被称为fixed)。为了显示4634257.1,将精度设置为1:

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

0

它添加了零,因为您(不知情地)要求它们。默认精度为6,在固定格式中,这意味着小数点后有6位数字(无论前面有多少位)。精度根据用于输出的格式具有不同的含义。(听起来不太正交,但一旦您知道可以预期什么,实际上效果很好。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接