形如
double 33.333 => char* "33.333"
double 1e+5 => char* "100000"
要求:
考虑浮点数范围(不能直接强转为int或long)
考虑浮点数的精度(处理边界问题)
尽量不使用其它库函数
如果你想连sprintf对%的处理都省掉的话,建议使用_gcvt_s函数。
使用方法如下:
char buffer[320];
_gcvt_s(buffer, 320, number, 30);
vint len = (vint)strlen(buffer);
if (buffer[len - 1] == '.')
{
buffer[len - 1] = '\0';
}
如果你使用的编译期没有_gcvt_s的话,可以自己封装一个:
void _gcvt_s(char* buffer, size_t size, double value, vint numberOfDigits)
{
sprintf(buffer, "%f", value);
char* point = strchr(buffer, '.');
if(!point) return;
char* zero = buffer + strlen(buffer);
while(zero[-1] == '0')
{
*--zero = '\0';
}
if(zero[-1] == '.') *--zero = '\0';
}
这样程序在别的编译期下既,而且在VC++下面又可以发挥优异的性能。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。