您需要您的实现将双精度值转换为字符串并检查该字符串的每个字符,然后将其与分隔符一起复制到输出字符串。
像这样的东西:
#include <stdio.h>
#include <string.h>
int thousandsep(double in, char* out_str, size_t out_len, unsigned int precision) {
char in_str[128], int_str[128], format[32];
size_t dlen, mod, i, j;
int c;
snprintf(format, sizeof format, "%%.%df", precision);
snprintf(in_str, sizeof in_str, format, in);
snprintf(int_str, sizeof int_str, "%d", (int)in);
dlen = strlen(in_str);
mod = strlen(int_str) % 3;
c = (mod == 0) ? 3 : mod;
for (i=0, j=0; i<dlen; i++, j++, c--) {
if (j >= out_len - 1) {
/* out_str is too small */
return -1;
}
if (in_str[i] == '.') {
c = -1;
} else if (c == 0) {
out_str[j++] = ',';
c = 3;
}
out_str[j] = in_str[i];
}
out_str[j] = '\0';
return 0;
}
然后像这样使用它:
char out_str[64];
if (thousandsep(20043.95381376, out_str, sizeof out_str, 8) == 0)
printf("%s\n", out_str); /* 20,043.95381376 */
if (thousandsep(164992818.48075795, out_str, sizeof out_str, 8) == 0)
printf("%s\n", out_str); /* 164,992,818.48075795 */
if (thousandsep(1234567.0, out_str, sizeof out_str, 0) == 0)
printf("%s\n", out_str); /* 1,234,567 */
注意:我假设如果您使用的是 Windows,您可能正在使用 MSVC,因此该解决方案应该适用于 C89 编译器。