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

Posted

技术标签:

【中文标题】在 C++ 中将科学计数法转换为十进制【英文标题】:Convert scientific notation to decimal in 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 以及是否可以删除它们。

【问题讨论】:

【参考方案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 位(不管之前有多少位)。根据用于输出的格式,精度具有不同的含义。 (这听起来不太正交,但在实践中效果很好,一旦你知道会发生什么。)

【讨论】:

以上是关于在 C++ 中将科学计数法转换为十进制的主要内容,如果未能解决你的问题,请参考以下文章

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

在没有科学计数法的 SQL Server 中将 float 转换为 varchar

在 bash/perl 中将科学记数法转换为十进制(不是整数)

将科学计数法中的数字转换为十进制[关闭]

将科学计数法中的十进制数转换为 IEEE 754

将具有科学计数法的字符串列表转换为十进制数