就像标题一样,如何在c ++中以sprintf
的速度将科学记数法中的double转换为字符串?
我有很多(约1e10)双数,并且必须将这些格式转换为字符串:±*。********* E±***,其中有10位有效数字。< / p>
但是sprintf
和stringstream
太慢了,有没有更快的方法?
感谢。
答案 0 :(得分:1)
使用boost是一种出路
std::string str = boost::lexical_cast<std::string>(dbl);
正常方法:
std::ostringstream strs;
strs << dbl;
std::string str = strs.str();
您应该使用 sprintf()
,因为它是最快的。
不同功能的运行时间@ http://zverovich.net/2013/09/07/integer-to-string-conversion-in-cplusplus.html
参考文献:http://www.codeproject.com/Questions/166322/converting-number-from-long-double-to-string
需要更多帮助?让我知道
答案 1 :(得分:1)
您要求的转换不是简单的操作。您可以查看How to implement " char * ftoa(float num) " without sprintf() library function in C, C++ and JAVA?以确定。
我不确定你会发现一个比sprintf更快的实现,因为它已经在标准C库中存在了一段时间并且已经可以优化了。
你能做的最好的事情是:
我知道这更像是一种暗示,而不是完整的答案,但对于评论和我能做的最好的事情来说,它太长了