c - 注册打印功能
问题描述
我需要为打印浮点的分数部分 xxx.yy -> yy 注册打印功能
但它不能按需要工作。我认为这是指针的问题,但我不明白问题出在哪里。
int print_fr (FILE *stream,const struct printf_info *info
,const void *const *args)
{
char *buffer;
const float ff = *((const float *) (args[0]));
printf("%f\n", ff); // if 123.45 -> -107374184.000000
double fract_part, int_part;
fract_part = modf(ff, &int_part);
int len = asprintf (&buffer, "%.0f",fract_part);
if (len == -1) return -1;
len = fprintf (stream, "%*s",
(info->left ? -info->width : info->width),
buffer);
free (buffer);
return len;
}
int print_fr_arginfo (const struct printf_info *info, size_t n
,int *argtypes)
{
if (n > 0)
argtypes[0] = PA_FLOAT;
return 1;
}
主程序
/* Register the print function */
register_printf_function ('w', print_ff, print_ff_arginfo);
printf("%w\n", 123.45); // result -0
解决方案
只打印浮点值的小数部分::
#include <math.h> // floorf()
float integerNum = floorf( originalFloat );
float fractNum = originalFloat - integerNum;
printf( "%f\n", fractNum );
推荐阅读
- typescript - 在 AWS CodeBuild 中运行 cdklocal。错误:没有配置凭据
- javascript - 使用 3D Secure 的 Stripe 支付意图仍然不完整
- docker - 如何将本地目录映射到 Docker 容器的目录?
- javascript - React如何在变量更改时重新渲染地图功能?
- node.js - 从 Github 部署状态 webhook 中获取对应的 PR
- python - 浮点到字符串转换后的 TypeError
- python - 如何使用编译器标志重建 tensorflow?
- php - 在 curl 中发布后如何获得结果
- django - 尽管继承了通用视图和 CSRF 中间件,但 Django CSRF 令牌未验证
- sas - 使用连接数据集之一填充缺失数据