如何在C ++中以科学计数法在E后面打印精确数字

时间:2019-07-09 08:50:55

标签: c++11

代码的输出为1.068950000E + 002,而不是所需的输出为1.068950000E + 02

val compute = Task {
  println(s"Compute")
  12
}

compute.flatMap { result =>
  // the rest of your program
}

1 个答案:

答案 0 :(得分:1)

您不能使用C ++中的标准操纵器以科学计数法设置输出指数的位数。

如果需要,您可以做的一件事是将'0'删除或添加到结果字符串中。

#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <algorithm>

int main()
{
    double c = 106.895;
    std::stringstream ss;
    ss.setf(std::ios_base::scientific | std::ios_base::uppercase);
    ss << std::setprecision(9) << c;
    auto number = ss.str();

    // you can add the '0' if needed
    size_t pos = number.size() - 3;
    if ( !std::isdigit(int(number[pos])) )
    {
        if ( number[pos] == 'E' )
            number.insert(pos + 1, "+0");
        else
            number.insert(pos + 1, 1, '0');
    }

    std::cout << number << '\n';  // --> 1.068950000E+002

    // Or remove it
    size_t pos_0 = number.size() - 3;
    if ( number[pos_0] == '0' )
        number.erase(pos_0, 1);
    std::cout << number << '\n'; // --> 1.068950000E+02
}