printf格式说明符,用于最大双倍宽度

时间:2013-01-18 07:15:25

标签: c++ c

我有以下数组:

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

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

1.123
12.12
123.1
12345

5 个答案:

答案 0 :(得分:2)

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("%.*f\n",digits,a[i]);
}

答案 1 :(得分:1)

#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] = '\0';
        printf("%s\n", floatString);
    }
    return 0;
}

答案 2 :(得分:1)

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;
}

答案 3 :(得分:1)

你可以使用它,

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

答案 4 :(得分:0)

您可以这样使用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("%s\n",buf);
    }
}