科学记数法中的double转换为字符串比c ++中的sprintf更快

时间:2015-02-01 07:14:17

标签: c++ string double number-formatting scientific-notation

就像标题一样,如何在c ++中以sprintf的速度将科学记数法中的double转换为字符串?

我有很多(约1e10)双数,并且必须将这些格式转换为字符串:±*。********* E±***,其中有10位有效数字。< / p>

但是sprintfstringstream太慢了,有没有更快的方法?

感谢。

2 个答案:

答案 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库中存在了一段时间并且已经可以优化了。

你能做的最好的事情是:

  • 从标准C库中获取源代码
  • 分析转化的方式
  • 与上述问题中的链接进行比较
  • 基准测试不同的实现

我知道这更像是一种暗示,而不是完整的答案,但对于评论和我能做的最好的事情来说,它太长了