将字符串从科学计数法格式化为没有它的字符串

时间:2019-03-19 04:38:33

标签: c format

我有一个字符串,例如“ 6544556E + 17”。 我必须将其转换为没有指数格式的字符串,例如“ 654455600000000000000000”。

如何在C语言中执行此操作?

注意:在C ++中不存在,因为该问题先前被错误地标记。

2 个答案:

答案 0 :(得分:1)

尝试使用atof将字符串转换为双精度,然后将其转换回字符串(同时使用std::fixed确保避免使用科学计数法。)

#include <sstream>
std::string str = "6544556E+17";
double d = atof(str.c_str());

std::ostringstream strs;
strs << std::fixed << d;
std::string no_scientic_str = strs.str();

答案 1 :(得分:1)

您可以尝试使用std::fixedstd::setprecision显示没有小数点和指数形式的浮点数。

std::ostringstream str;
str << std::fixed << std::setprecision(0) << 6544556E+17 << std::endl;
std::string s = str.str();

但是,在我的计算机上,我没有在s中收到“ 654455600000000000000000”。我得到“ 654455599999999987941376”。我猜想使用IEEE浮点表示不能精确表示654455600000000000000000。我不确定您将采用哪种逻辑将“ 6544555999999999999987941376”转换为“ 654455600000000000000000”。