【问题标题】: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
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);
但我敢打赌,你有更大的鱼要在别处煎。