将字符串格式化为科学记数法

Joh*_*one 8 c++ string math

我有一个看起来像这样的字符串:

"0.4794255386042030002732879352156"
Run Code Online (Sandbox Code Playgroud)

这大约是罪(0.5).我想格式化字符串看起来更好

"4.794255386042e-1"
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?记住我正在处理字符串而不是数字(浮点数,双精度数).另外,我需要进行舍入以保持数字尽可能准确,我不能只是截断.如果我需要转换为不同的数据类型,我宁愿选择long double,因为常规double没有足够的精度.四舍五入之前,我想要至少12位小数.也许我可以做一个简单的sprintf()转换.

cod*_*ict 9

像这样的东西:

#include<iostream>
using namespace std;

int main()
{
        char *s = "0.4794255386042030002732879352156";
        double d;

        sscanf(s,"%lf",&d);
        printf("%.12e\n",d);

        return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

输出:

# g++ a.cpp  && ./a.out
4.794255386042e-01
Run Code Online (Sandbox Code Playgroud)


coe*_*udo 6

您是否在寻找像这样

这是一个示例:

 // modify basefield
#include <iostream>
#include <sstream>

using namespace std;

int main () {
    std::string numbers("0.4794255386042030002732879352156");
    std::stringstream stream;
    stream << numbers;
    double number_fmt;
    stream >> number_fmt;
    cout.precision(30);

    cout << number_fmt << endl;

    cout.precision(5);
    cout << scientific << number_fmt << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0.479425538604203005377257795772

4.79426e-01