使用包含浮点数的 sprintf 创建固定长度输出字符串

Kun*_*ngi 2 c floating-point printf fixed-length-record

我正在尝试创建一个具有以下结构的文件:
- 每行有 32 个字节 - 每行看起来像这样的格式字符串:“%10i %3.7f %3.7f\n”

我的问题如下:当我有一个负浮点数时,该行会变长一个甚至两个字符,因为 - 符号不计入“%3.7f”。

还有比这更好的方法吗?

if( node->lng > 0 && node->lat > 0 ) { 
    sprintf( osm_node_repr, "%10i %3.7f %3.7f\n", node->id, node->lng, node->lat );
} else if (node->lng > 0 && node->lat < 0) {
    sprintf( osm_node_repr, "%10i %3.7f %3.6f\n", node->id, node->lng, node->lat );
} else if (node->lng < 0 && node->lat > 0) {
    sprintf( osm_node_repr, "%10i %3.6f %3.7f\n", node->id, node->lng, node->lat );
} else if ( node->lng < 0 && node->lat < 0 ) { 
    sprintf( osm_node_repr, "%10i %3.6f %3.6f\n", node->id, node->lng, node->lat );
}
Run Code Online (Sandbox Code Playgroud)

感谢您的回答,
安德烈亚斯

xto*_*ofl 5

您也可以使用前缀强制打印符号+printf( "+3.6f", 1.0 );将导致固定尺寸的打印输出。

(感谢我见过的最方便的 printf 文档)。