如何在Windows上的C中为double添加千位分隔符?
发布时间:2020-12-14 05:28:06 所属栏目:Windows 来源:网络整理
导读:我使用MPFR库对大数字进行计算,但也返回小数点后8位数的双精度数. 我mpfr_sprintf一个char数组的数字,所以精度或任何东西都不会丢失. 一切都很好,除了我没有在文档中找到任何千分隔符选项(或我错过了它). 鉴于像20043.95381376这样的数字,我想代表它像20,043
我使用MPFR库对大数字进行计算,但也返回小数点后8位数的双精度数.
我mpfr_sprintf一个char数组的数字,所以精度或任何东西都不会丢失. 鉴于像20043.95381376这样的数字,我想代表它像20,043.95381376以获得更好的可读性. 或者数字164992818.48075795为164,992,818.48075795 我读到了应该添加到printf / sprintf的撇号,但这似乎是一个UNIX / POSIX的东西,我是一个Windows用户. 因为在内部我将数字打印为字符串,我认为我能做的是编写一个自定义实现,根据数字(> 1000> 10000> 100000等)自动添加逗号,但后来我意识到这样的功能strncpy或strcpy将基本上替换,而不是将逗号添加到所需位置.以下是我如何回答如何做到这一点. 我该怎么做? 解决方法
您需要实现将double值转换为string并检查该字符串的每个字符,然后将其与分隔符一起复制到输出字符串.
像这样的东西: #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] = ' '; return 0; } 然后像这样使用它: char out_str[64]; if (thousandsep(20043.95381376,out_str,sizeof out_str,8) == 0) printf("%sn",out_str); /* 20,043.95381376 */ if (thousandsep(164992818.48075795,out_str); /* 164,818.48075795 */ if (thousandsep(1234567.0,0) == 0) printf("%sn",out_str); /* 1,234,567 */ 注意:我假设如果你在Windows上,你可能正在使用MSVC,所以这个解决方案应该在C89编译器上工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- How to use Nissan consult 3 plus to check, make key and
- macos – Windows上的Mac字体渲染
- windows – 运行一个节点应用程序脚本后退出批处理文件
- 将Windows驱动程序连接到Userland服务
- Windows命令相当于egrep
- windows-server-2008-r2 – 远程删除卷影副本
- Win32,如何用C挂钩编译程序中的函数?
- 安装了哪个版本的Windows Management Framework?
- windows-7 – 如何隔离msysgit附带的msys实现中提供的ssh-a
- 适用于Windows的Snmp Server