CString::Format的常用方法

参考:http://blog.csdn.net/wangkaishou/article/details/5846152

Format用于转换的格式字符:

  %c                 单个字符

  %d                 十进制整数(int)

  %ld                十进制整数(long)

  %f                 十进制浮点数(float)

  %lf                十进制浮点数(double)

  %o                 八进制数

  %s                 字符串

  %u                 无符号十进制数

  %x                 十六进制数

格式字符要正确,不然轻则乱码重则崩溃

1.int 转 CString:

 1     int a = 12;
 2     CString str;
 3     int len = 0;
 4     CString str_len;
 5 
 6     str.Format("%d", a);
 7     AfxMessageBox(str);//12 输出a的字符串格式
 8     len = str.GetLength();
 9     str_len.Format("%d", len);
10     AfxMessageBox(str_len);//2
11 
12     str.Format("%04d", a);
13     AfxMessageBox(str);//0012 输出数据a的字符串格式并在前面补0,长度为4
14     len = str.GetLength();
15     str_len.Format("%d", len);
16     AfxMessageBox(str_len);//4
17     
18     a = 12000;
19     str.Format("%04d", a);
20     AfxMessageBox(str);//12000 实际长度超过设置长度以实际长度为准
21     len = str.GetLength();
22     str_len.Format("%d", len);
23     AfxMessageBox(str_len);//5
24 
25     a = 12;
26     str.Format("%4d", a);
27     AfxMessageBox(str);//  12 (前面有2个空格)输出数据a的字符串格式并在前面补空格
28     len = str.GetLength();
29     str_len.Format("%d", len);
30     AfxMessageBox(str_len);//4 
31 
32     str.Format("%24d", a);
33     AfxMessageBox(str);//                      12(前面有22个空格)只能在前面补0 不能补其他字符
34     len = str.GetLength();
35     str_len.Format("%d", len);
36     AfxMessageBox(str_len);//24

 2.double 转 CString:

    double lf_a;
    lf_a = 1.234;
    str.Format("%lf", lf_a);
    AfxMessageBox(str);//1.234000 输出lf_a的字符串格式 默认保留小数点后6位 float也是6位
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//8

    lf_a = 1.23456746;
    str.Format("%lf", lf_a);
    AfxMessageBox(str);//1.234567 输出lf_a的字符串格式 默认保留小数点后6位 四舍五入
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//8

    lf_a = 1.23556746;
    str.Format("%6.2lf", lf_a);
    AfxMessageBox(str);//  1.24(前面有2个空格) 输出lf_a的字符串格式 保留小数点后2位 四舍五入,并在前面补空格
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//6

    lf_a = 1.23556746;
    str.Format("%06.2lf", lf_a);
    AfxMessageBox(str);//001.24 输出lf_a的字符串格式 保留小数点后2位 四舍五入,并在前面补0
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//6

 3.int 转各个进制字符串

    str.Format("%d", a);
    AfxMessageBox(str);//12 输出a的十进制字符串格式
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//2

    str.Format("%X", a);
    AfxMessageBox(str);//C 输出a的十六进制字符串格式
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//1

    str.Format("%o", a);
    AfxMessageBox(str);//14 输出a的八进制字符串格式
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//2

    char arr[10];
    _itoa_s(a, arr, 2);
    str.Format("%s", arr);
    AfxMessageBox(str);//1100 输出a的二进制字符串格式
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//4

 4.其他

    str.Format("000%-4d111", 12);
    AfxMessageBox(str);//00012  111(12后111前有2个空格) 指定参数向左齐
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//10

    str.Format("%.5d", 123);
    AfxMessageBox(str);//00123 在整型值的前面补0
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//5

    str.Format("%.2s", "1234"); 
    AfxMessageBox(str);//12  比字符串型的长度小,则会截断尾部的字符
    len = str.GetLength();
    str_len.Format("%d", len);
    AfxMessageBox(str_len);//2
     //CString::Format也支持这些格式
     double lf_b;
      lf_b = 100.2345678;
      printf("%f \n", lf_b);//100.234568    保留小数点后6位,四舍五入
      printf("%g \n", lf_b);//100.235       保留6个有效数字包括整数部分和小数部分,四舍五入
      printf("%e \n", lf_b);//1.002346e+002 保留小数点后6位,四舍五入
      lf_b = 1.2000;
      printf("%f \n", lf_b);//1.200000      保留小数点后6位,不够补0
      printf("%G \n", lf_b);//1.2           去掉无效数字
      printf("%E \n", lf_b);//1.200000E+000 保留小数点后6位,四舍五入 
    printf("%+d %+d %+d \n",-5, 0, 5);//-5 +0 +5   强制输出正负
    printf("% d % d % d \n",-5, 0, 5);//-5  0  5   只在负的前面加‘-’
    
    printf("%+e %+e %+e \n",-15.1, 0.2, 51.3);//-1.510000e+001 +2.000000e-001 +5.130000e+001  组合

 

格式小结:
(1)最常用的格式是%d,以10进制形式打印一个整数

  如果输出的整数是负数,则输出的第一个字符就是‘-’号

(2)%u格式与%d格式类似,只不过要求打印无符号10进制整数

(3)%o格式输出8进制整数

(4)%x和%X格式输出16进制整数

  %x格式中用小写字母a,b,c,d,e,f来表示10到15之间的数

  %X格式中用大写字母A,B,C,D,E,F来表示10到15之间的数

  共同点:8进制和16进制整数总是作为无符号数处理的。

(5)%s格式用于打印字符串,对应的参数应该是一个字符指针,待输出的字符始于该指针所指向的地址,直到出现一个空字符('/0')时终止

(6)%c格式用于打印单个字符:例如:printf("%c", 'c'); 等价于 putchar('c');

(7)%g,%f和%e这三个格式用于打印浮点值

  %g格式其作用有1.去掉该数尾多余的零(小于六位的数)2.保留六位有效数字(大于六位的)

  %e格式用于打印浮点数时,一律显示地使用指数形式:例如:输出圆周率时是:3.141593e+00

  两者的区别:1.%g格式打印出的数是总共6位有效数字2.%e格式打印出小数点后的6位有效数字

  %f禁止使用指数形式来表示浮点数。因此圆周率输出为:3.141593(小数点后6位有效数字)

(8)%%格式用于打印一个%字符

(9)%E和%e只是在输出时用大写字母(E)代替了小写字母(e)

(10)%G和%g无区别

 

posted @ 2017-12-26 15:11  ckrgd  阅读(1068)  评论(0)    收藏  举报