【问题标题】:efficient function to convert float/double to string将浮点数/双精度数转换为字符串的有效函数
【发布时间】:2009-10-12 23:40:37
【问题描述】:

目前,我知道的唯一功能是_snprintf_s,如下所示

double dMyValue = <some value>;
_snprintf_s(pszMyBuffer, sizeof(pszMyBuffer), 12, "%.10f", dMyValue);

【问题讨论】:

  • 在我看来就像普通的旧 C。
  • snprintf 和朋友们可能效率很高。

标签: c string performance floating-point


【解决方案1】:

看起来您正在使用 Visual C++。还有_fcvt_s_ecvt_s_gcvt_s。与_snprintf_s 的主要区别在于它们不解析格式字符串,因此它们应该更高效一些。 C 运行时库函数通常经过良好调整,因此您可能不会出错。

【讨论】:

    【解决方案2】:

    如果您碰巧知道该值被限制在某个范围内,您也许可以击败内置函数。例如:

    if (v < 0){
      strcat(s, "-"); s++;
      v = -v;
    }
    double di = floor(v);
    double frac = v - di;
    int i = (int)di;
    int f = (int)floor(frac * 1e10);
    strcat(s, itoa(i)); s += strlen(s);
    strcat(s, "."); s++;
    strcat(s, itoa(f)); s += strlen(s);
    

    但我敢打赌,你有更大的鱼要在别处煎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 2021-06-25
      • 2018-04-26
      相关资源
      最近更新 更多