具有指数的大数字的双字符串转换

时间:2014-01-17 06:25:03

标签: c++ c++11

我有一个应用程序,我必须处理非常大的数字。应用程序API给我编号,然后我必须将其转换为字符串并发送到进一步处理。 代码收到号码为 - 1535625179.1619387

然后转换我用 -

char buffer[255];
sprintf(buffer, "%e", OverallVolume); //OverallVolume has the above value.

现在这里缓冲变量返回1.535625e + 009,标准化为1535625000.00 但我的应用程序显示值为1.5356252e + 09,标准化为1535625200.00

所以我想问一下我应该使用什么方法将Double转换为String,以便我的结果值与应用程序显示的值匹配。

1 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,您希望在小数点后面显示7位数字。为此,请按如下方式指定精度:

sprintf(buffer, "%.7e", OverallVolume); // buffer contains 1.5356252e+09

Live demo


此外,由于这是标记的C ++,这是一个使用IO流的版本,打印相同的结果。

#include <ios>
#include <iomanip>
#include <iostream>
#include <sstream>

int main() 
{
    double OverallVolume = 1535625179.1619387;
    std::ostringstream ss;

    ss << std::scientific << std::setprecision(7) << OverallVolume;
    std::cout << ss.str() << '\n'; // prints 1.5356252e+09
}

Live demo