最大双宽度的Printf格式说明符

printf format specifier for max double width

本文关键字:Printf 格式 说明符      更新时间:2023-10-16

我有以下数组:

float a[]={ 1.123 12.123, 123.123, 12345.123};

如何创建以下输出(裁剪小数部分):

1.123
12.12
123.1
12345
float a[]={ 1.123, 12.123, 123.123, 12345.123};
for(int i = 0 ; i < 4 ; i++) {
    int digits = 4 - log10(a[i]);
    digits = digits < 0 ? 0 : digits;
    digits = digits > 3 ? 3 : digits;
    printf("%.*fn",digits,a[i]);
}
int main()
{  
  float a[]={ 1.123, 12.123, 123.123, 12345.123}; 
  for(int i=0; i<4; i++)
  {
    std::stringstream ss;
    ss << a[i];
    std::string s;
    ss >> s;
    s.resize(5);        // it only works with 99999
    cout << s << "n";
  }
  cout << endl; 
  return 0;
}
#include <stdio.h>
#include <string.h>
int main(int argc,char* argv[]){
    float a[]= { 1.123, 12.123, 123.123, 12345.123};
    int i;
    char floatString[100] = {0};
    for (i=0; i < sizeof(a)/sizeof(a[0]); i++) {
        memset(floatString, 0, sizeof(floatString));
        sprintf(floatString, "%f", a[i]);
        floatString[5] = '';
        printf("%sn", floatString);
    }
    return 0;
}

你可以这样用,

printf("%1.3fn%2.2fn%3.1fn%5.0fn", a[0], a[1], a[2], a[3]);

可以这样使用snprintf:

int main()
{
    float a[]= { 1.123, 12.123, 123.123, 12345.123 };
    char buf[8];
    int i;
    for (i=0;i<sizeof(a)/sizeof(a[0]);i++) {
        snprintf(buf, 6, "%f", a[i]);
        printf("%sn",buf);
    }
}