整形和字符转换
Python中print用法汇总(打印字符串,整形和浮点型)

Python中print⽤法汇总(打印字符串,整形和浮点型)1、打印字符串1. string="hello"2. #%s打印时结果是hello3. print "string=%s" % string # output: string=hello4. #%2s意思是字符串长度为2,当原字符串的长度超过2时,按原长度打印,所以%2s的打印结果还是hello5. print "string=%2s" % string # output: string=hello6. #%7s意思是字符串长度为7,当原字符串的长度⼩于7时,在原字符串左侧补空格,7. #所以%7s的打印结果是 hello8. print "string=%7s" % string # output: string= hello9. #%-7s意思是字符串长度为7,当原字符串的长度⼩于7时,在原字符串右侧补空格,10. #所以%-7s的打印结果是 hello11. print "string=%-7s!" % string # output: string=hello !12. #%.2s意思是截取字符串的前2个字符,所以%.2s的打印结果是he13. print "string=%.2s" % string # output: string=he14. #%.7s意思是截取字符串的前7个字符,当原字符串长度⼩于7时,即是字符串本⾝,15. #所以%.7s的打印结果是hello16. print "string=%.7s" % string # output: string=hello17. #%a.bs这种格式是上⾯两种格式的综合,⾸先根据⼩数点后⾯的数b截取字符串,18. #当截取的字符串长度⼩于a时,还需要在其左侧补空格19. print "string=%7.2s" % string # output: string= he20. print "string=%2.7s" % string # output: string=hello21. print "string=%10.7s" % string # output: string= hello22. #还可以⽤%*.*s来表⽰精度,两个*的值分别在后⾯⼩括号的前两位数值指定23. print "string=%*.*s" % (7,2,string) # output: string= he2、打印整形1. num=142. #%d打印时结果是143. print "num=%d" % num # output: num=144. #%1d意思是打印结果为1位整数,当整数的位数超过1位时,按整数原值打印,所以%1d的打印结果还是145. print "num=%1d" % num # output: num=146. #%3d意思是打印结果为3位整数,当整数的位数不够3位时,在整数左侧补空格,所以%3d的打印结果是 147. print "num=%3d" % num # output: num= 148. #%-3d意思是打印结果为3位整数,当整数的位数不够3位时,在整数右侧补空格,所以%3d的打印结果是14_9. print "num=%-3d" % num # output: num=14_10. #%05d意思是打印结果为5位整数,当整数的位数不够5位时,在整数左侧补0,所以%05d的打印结果是0001411. print "num=%05d" % num # output: num=0001412. #%.3d⼩数点后⾯的3意思是打印结果为3位整数,13. #当整数的位数不够3位时,在整数左侧补0,所以%.3d的打印结果是01414. print "num=%.3d" % num # output: num=01415. #%.0003d⼩数点后⾯的0003和3⼀样,都表⽰3,意思是打印结果为3位整数,16. #当整数的位数不够3位时,在整数左侧补0,所以%.3d的打印结果还是01417. print "num=%.0003d" % num # output: num=01418. #%5.3d是两种补齐⽅式的综合,当整数的位数不够3时,先在左侧补0,还是不够5位时,再在左侧补空格,19. #规则就是补0优先,最终的长度选数值较⼤的那个,所以%5.3d的打印结果还是 01420. print "num=%5.3d" % num # output: num= 01421. #%05.3d是两种补齐⽅式的综合,当整数的位数不够3时,先在左侧补0,还是不够5位时,22. #由于是05,再在左侧补0,最终的长度选数值较⼤的那个,所以%05.3d的打印结果还是0001423. print "num=%05.3d" % num # output: num=0001424. #还可以⽤%*.*d来表⽰精度,两个*的值分别在后⾯⼩括号的前两位数值指定25. #如下,不过这种⽅式04就失去补0的功能,只能补空格,只有⼩数点后⾯的3才能补026. print "num=%*.*d" % (04,3,num) # output: num= 0143、打印浮点型1. import math2. #%a.bf,a表⽰浮点数的打印长度,b表⽰浮点数⼩数点后⾯的精度3. #只是%f时表⽰原值,默认是⼩数点后5位数4. print "PI=%f" % math.pi # output: PI=3.1415935. #只是%9f时,表⽰打印长度9位数,⼩数点也占⼀位,不够左侧补空格6. print "PI=%9f" % math.pi # output: PI=_3.1415937. #只有.没有后⾯的数字时,表⽰去掉⼩数输出整数,03表⽰不够3位数左侧补08. print "PI=%03.f" % math.pi # output: PI=0039. #%6.3f表⽰⼩数点后⾯精确到3位,总长度6位数,包括⼩数点,不够左侧补空格10. print "PI=%6.3f" % math.pi # output: PI=_3.14211. #%-6.3f表⽰⼩数点后⾯精确到3位,总长度6位数,包括⼩数点,不够右侧补空格12. print "PI=%-6.3f" % math.pi # output: PI=3.142_13. #还可以⽤%*.*f来表⽰精度,两个*的值分别在后⾯⼩括号的前两位数值指定14. #如下,不过这种⽅式06就失去补0的功能,只能补空格15. print "PI=%*.*f" % (06,3,math.pi) # output: PI=_3.142。
基本数据类型和表达式

第一章 基本数据类型和表达式C++数据类型为什么要分数据类型 不同的数据类型存储格式不同。
不同的数据类型所实施的操作不同C++数据类型1、整形数据各种整形数据的基本情况数据类型 占用字节(跟编译器有关)数据范围short2 bytes -32768~32767 unsigned short2 bytes0~65535int 2bytes(16位机) 4 bytes(32位机) -32768~32767 -(231)~231-1 unsigned int2bytes(16位机) 4bytes(32位机)0~65535 0~232-1long 4bytes -(231)~231-1 unsigned long4 bytes0~232-1整形常量在整形常量后可加修饰符l 或L 表示长整型基本类型实型(浮点型)双精度型(double)十进制整数:以非零的数字开始123//signed int65000//unsigned int123u//unsigned int123L//singed long int八进制整数:以零开始0123=83//unsigned int011L=9//unsigned long int十六进制整数:以0X或0x开始0x123=291//signed int0X123u=291//unsigned int整型变量类型修饰符变量名[=表达式][,变量名[=表达式]]int x,y;int i=1,j=0;2字符型数据字符型数据的基本情况字符类型:在内部实现是个单字节长度的整型,因此常用字符型定义值较小的整数。
单引号括起来的一个字符如’a’,’D’,’?’,’S’字符数据在内存中的存储形式以ASCII码存储,占1字节,用7位用于表示字符时存放的是字符的ASCII码值。
数据类型占用字节数据范围char 1Byte -128~127 unsigned char 1Byte 0~255转义字符转义序列对应ASCII码值对应功能或字符转义序列对应ASCII码值对应功能或字符\b 8 退格\’39 单引号\f 12 换页\’’34 双引号\n 10 换行\? 63 问好\r 13 回车\ccc ccc为八进制值该值对应的字符\t 9 水平制表\\xhh hh为十六进制值该值对应的字符字符变量用来存放字符常量例:char c1,c2;c1=’a’;c2=’A’;字符型和整形的关系字符数据和整形数据之间可以通用,可以按字符形式输出,也可以按整形输出。
字符和整形

字符的存储是将它对应的ASCII码存放在存储单元,它的存储形式和整形的存储形式类似,只是所占的位不同。
如:字符‘a’,它对应的ASCII码为十进制的97,转化为二进制位0110 0001。
既然字符和整形的存储形式类似,那么字符型数据和整形数据在存储和输出上是可以通用。
char ch1=97;Char ch1=0x61;与char ch2=‘a’;二者是等价的。
字符数据以整形数据输出时,可直接将ASCII码作为整数输出(十六进制或十进制),当以字符形式输出时,则需将ASCII码转为对应的字符再输出。
如字符ch=‘f’,ch=ch-'a'+10; 此时ch对应的ASCII码为15(存储形式为0000 1111),将其转为十六进制形式(%0x)输出为0F。
串型数据通信时,数据的都以字符串类型CString类型和Variant类型转换的。
那么若以十六进制发送,调用StringHex1()函数后,将发送编辑框中写入的CString类型字符串,转化为十六进制字符数组,如输入“61”抓化为0x61,若以十六进制接收,则把接收到的字符转化为其对应的十六数输出。
(1). 以十六进制发送,不以十六进制形式接收,发送’a’,接收显示时,显示它的十六进制形式。
存储类型为0110 0001
(2). 以十六进制发送,不以十六进制接收,字符‘6‘和’1’分别转化为十六进制的0x06、0x01,将他们赋给int型的hexdata和lowhexdata,为0x0006,0x0001然后再经hexdata=hexdata*16+lowhexdata;转化为0x0061;再将其放入字符型数组为0x61.显示时由于是以%C形式显示的,所以将其对应的字符‘a’显示出来。
js字符串转换整形

js字符串转换整形在js读取⽂本框或者其它表单数据的时候获得的值是字符串类型的,例如两个⽂本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要⼩于b.value,因为他们都是字符串形式的.在⽹上找了⼀下js字符串转数字的⽂章,这个⽐较全⽅法主要有三种转换函数、强制类型转换、利⽤js变量弱类型转换。
1. 转换函数:js提供了parseInt()和parseFloat()两个转换函数。
前者把值转换成整数,后者把值转换成浮点数。
只有对String类型调⽤这些⽅法,这两个函数才能正确运⾏;对其他类型返回的都是NaN(Not a Number)。
⼀些⽰例如下:复制代码代码如下:parseInt("1234blue"); //returns 1234parseInt("0xA"); //returns 10parseInt("22.5"); //returns 22parseInt("blue"); //returns NaNparseInt()⽅法还有基模式,可以把⼆进制、⼋进制、⼗六进制或其他任何进制的字符串转换成整数。
基是由parseInt()⽅法的第⼆个参数指定的,⽰例如下:复制代码代码如下:parseInt("AF", 16); //returns 175parseInt("10", 2); //returns 2parseInt("10", 8); //returns 8parseInt("10", 10); //returns 10如果⼗进制数包含前导0,那么最好采⽤基数10,这样才不会意外地得到⼋进制的值。
例如:复制代码代码如下:parseInt("010"); //returns 8parseInt("010", 8); //returns 8parseInt("010", 10); //returns 10parseFloat()⽅法与parseInt()⽅法的处理⽅式相似。
C语言把数字转换为字符串的函数

C语⾔把数字转换为字符串的函数C语⾔itoa()函数和atoi()函数详解(整数转字符C实现)C语⾔提供了⼏个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。
1.int/float to string/array:C语⾔提供了⼏个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下⾯列举了各函数的⽅法及其说明。
● itoa():将整型值转换为字符串。
● ltoa():将长整型值转换为字符串。
● ultoa():将⽆符号长整型值转换为字符串。
● gcvt():将浮点型数转换为字符串,取四舍五⼊。
● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含⼗进制⼩数点。
● fcvt():指定位数为转换精度,其余同ecvt()。
除此外,还可以使⽤sprintf系列函数把数字转换成字符串,其⽐itoa()系列函数运⾏速度慢2. string/array to int/floatC/C++语⾔提供了⼏个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。
● atof():将字符串转换为双精度浮点型值。
● atoi():将字符串转换为整型值。
● atol():将字符串转换为长整型值。
● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
● strtoul():将字符串转换为⽆符号长整型值,并报告不能被转换的所有剩余数字。
这⾥写⼀个常⽤的转换使⽤⽅式#include<stdio.h>#include<stdlib.h>void num_to_str(){int a = 10086;char buff[10] = {0};itoa(a,buff,10);//将a以10进制的形式写⼊buff中printf("%s\n", buff);}void str_to_num(){char *p = "10001";printf("%d\n", atoi(p));//atoi直接返回整形转换后的数据}int main(){num_to_str();str_to_num();return 0;}这⾥需要注意的是,atoi和itoa均为windows系统下stdlib.h⽂件内的库函数,因此,如果在Linux系统即使包含stdlib.h这个头⽂件,编译时仍然会提⽰这两个函数没有定义过。
数组字符型强制转成整形的方法

标题:数组字符型强制转成整形的方法导语:在程序设计中,经常会遇到将数组中的字符型数据转换为整形数据的需求。
本文将深入探讨数组字符型强制转成整形的方法,分析多种实用的解决方案,并就该主题展开讨论。
一、了解数组字符型数据在开始讨论数组字符型强制转成整形的方法之前,首先需要了解数组中的字符型数据。
数组中的字符型数据通常表示为字符串或字符数组,在程序设计中经常用来存储文本信息或特定格式的数据。
然而,有时候我们需要将这些字符型数据转换为整形数据,以便进行数值计算或其他操作。
二、常用的强制转换方法针对数组字符型数据转换为整形数据的需求,我们可以采用多种方法来实现:1. 使用循环遍历数组元素,逐个转换为整形数据。
这种方法简单直接,但对于大规模的数组操作可能效率较低。
2. 调用编程语言提供的内置函数或库函数,如atoi()函数、valueOf()方法等。
这些函数能够将字符型数据转换为整形数据,且通常具有一定的容错处理能力。
3. 借助正则表达式进行匹配和提取,将字符型数据中的数字部分转换为整形数据。
这种方法适用于数据格式较为复杂的情况,但需要对正则表达式有一定的了解和掌握。
4. 利用字符编码表进行转换,将字符型数据的ASCII码值转换为对应的整形数值。
这种方法在处理字符型数据时较为灵活,且能够处理各种字符编码格式。
三、实际案例分析为了更好地理解数组字符型强制转成整形的方法,我们可以通过实际案例进行深入分析和讨论。
假设我们有一个包含数字字符型数据的数组,需要将其转换为整形数据以进行求和操作。
我们可以选择使用内置函数atoi()来实现:```C#include <stdio.h>#include <stdlib.h>int main() {char str[] = "12345";int num = atoi(str);printf("The integer is: %d\n", num);return 0;}```通过调用atoi()函数,我们能够将字符型数据"12345"转换为整形数据12345,并在程序中进行进一步处理。
python中将整形转化为字符串的方法

Python中将整数转换为字符串有多种方法,本文将介绍几种常用的方法和技巧。
对于初学者来说,这是一个基本而且重要的知识点,希望通过本文的讲解,读者能够对这个问题有更加清晰的理解。
1. 使用str()函数最常见的方法是使用内置的str()函数将整数转换为字符串。
这个函数非常简单,只需要将整数作为参数传入即可,如下所示:```pythonnum = 123num_str = str(num)print(num_str)```这将打印出字符串"123"。
这种方法非常直观和易懂,在实际应用中也是最常用的。
2. 使用format()方法另一种常见的方法是使用字符串的format()方法。
这个方法可以在字符串中插入其他变量,并且可以指定格式。
通过使用"{}"作为占位符,我们可以将整数转换为字符串,如下所示:```pythonnum = 456num_str = "{}".format(num)print(num_str)```这同样会打印出字符串"456"。
这种方法可以在一些特定的字符串格式化场景中使用,但一般情况下使用str()函数更加简洁。
3. 使用字符串拼接还有一种方法是通过字符串拼接的方式将整数转换为字符串。
我们可以将整数与空字符串进行拼接,这样就会自动将整数转换为字符串,如下所示:```pythonnum = 789num_str = "" + str(num)print(num_str)```这同样会打印出字符串"789"。
这种方法虽然简单,但相对于str()函数来说,可读性不够好,因此在实际应用中使用较少。
4. 使用repr()函数最后一种方法是使用内置的repr()函数。
这个函数返回一个对象的字符串表示,通常用于调试和日志记录。
虽然它可以将整数转换为字符串,但在实际应用中并不常见。
c++字符位运算转整形

c++字符位运算转整形在C++中,可以使用位运算将字符转换为整数。
以下是一个简单的示例,展示如何将字符转换为整数:```cpp#include <iostream>int main() {char c = 'A';unsigned int num = 0;// 将字符的ASCII码转换为无符号整数num = static_cast<unsigned int>(c);std::cout << "字符" << c << " 对应的整数为: " << num << std::endl;// 如果需要将整数转换回字符,可以使用以下方法char converted_char = static_cast<char>(num);std::cout << "转换回字符为: " << converted_char << std::endl;return 0;}```在这个示例中,我们首先将字符转换为无符号整数,然后将整数转换回字符。
需要注意的是,这里的示例仅适用于单个字符。
如果需要处理多个字符,可以对字符数组进行类似的操作。
此外,如果需要对字符进行位运算,例如位与、位或、位异或等操作,可以将字符转换为整数后,使用位运算符进行操作。
例如:```cpp#include <iostream>int main() {char a = 'A';char b = 'B';unsigned int num1 = static_cast<unsigned int>(a);unsigned int num2 = static_cast<unsigned int>(b);// 位与操作unsigned int result = num1 & num2;std::cout << "位与结果为: " << result << std::endl;return 0;}```以上示例展示了如何将字符转换为整数,以及如何在整数上执行位运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
整型和字符串相互转换itoa功能:把一整数转换为字符串用法:char *itoa(int value, char *string, int radix);详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.参数:value: 待转化的整数。
radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。
* string: 保存转换后得到的字符串。
返回值:char * : 指向生成的字符串,同*string。
备注:该函数的头文件是"stdlib.h"程序例:#include <stdlib.h>#include <stdio.h>int main(){int number = 123456;char string[25];itoa(number, string, 10);printf("integer = %d string = %s\n", number, string);return 0;}注释:编译系统:VC++6.0,TC不支持。
atoiC语言库函数名: atoi功能: 把字符串转换成整型数.名字来源:array to integer 的缩写.函数说明: atoi()会扫描参数nptr字符串,如果第一个字符不是数字也不是正负号返回零,否则开始做类型转换,之后检测到非数字或结束符\0 时停止转换,返回整型数。
原型: int atoi(const char *nptr);需要用到的头文件: #include <stdlib.h>程序例:1)#include <stdlib.h>#include <stdio.h>int main(){int n;char *str = "12345.67";n = atoi(str);printf("string = %s integer = %d\n", str, n);return 0;}执行结果string = 12345.67 integer = 123452)#include <stdlib.h>#include <stdio.h>int main(){char a[] = "-100" ;char b[] = "123" ;int c ;c = atoi( a ) + atoi( b ) ;printf("c = %d\n", c) ;return 0;}执行结果c = 23sprintfsprintf 将字串格式化。
在头文件#include<stdio.h>中语法: string sprintf(string format, mixed [args]...);传回值: 字串1. 处理字符方向。
-负号时表时从后向前处理。
2. 填空字元。
0 的话表示空格填0;空格是内定值,表示空格就放着。
3. 字符总宽度。
为最小宽度。
4. 精确度。
指在小数点后的浮点数位数。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-转换字符=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-% 印出百分比符号,不转换。
b 整数转成二进位。
c 整数转成对应的ASCII 字元。
d 整数转成十进位。
f 倍精确度数字转成浮点数。
o 整数转成八进位。
s 整数转成字串。
x 整数转成小写十六进位。
X 整数转成大写十六进位。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-$money = 123.1$formatted = sprintf ("%06.2f", $money); // 此时变数$ formatted 值为"123.10"$formatted = sprintf ("%08.2f", $money); // 此时变数$ formatted 值为"00123.10"$formatted = sprintf ("%-08.2f", $money); // 此时变数$ formatted 值为"123.1000"$formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比?>¢%08.2f解释:%开始符0是"填空字元" 表示,如果长度不足时就用0来填满。
6格式化后总长度2f小数位长度,即2位¢第4行值为"00123.10" 解释:因为2f是(2位)+小数点符号(1)+前面123(3位)=6位,总长度为8位,故前面用[填空字元]0表示,即00123.10¢第4行值为"-123.1000" 解释:-号为反向操作,然后填空字元0添加在最后面了在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。
由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。
这也导致sprintf 比printf 有用得多。
sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。
而它的精华,显然就在第二个参数:格式化字符串上。
printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。
格式化数字字符串sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代如://把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"可以指定宽度,不足的左边补空格:sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"当然也可以左对齐:sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"也可以按照16 进制打印:sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。
sprintf(s, "%08X", 4567); //产生:"000011D7"上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。
这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所以我们自然希望用4 个16 进制数字来打印它:short si = -1;sprintf(s, "%04X", si);产生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。
如果你想看si 的本来面目,那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不是补符号位):sprintf(s, "%04X", (unsigned short)si);就可以了。
或者:unsigned short si = -1;sprintf(s, "%04X", si);sprintf 和printf 还可以按8 进制打印整数字符串,使用”%o”。
注意8 进制和16 进制都不会打印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16 进制或8 进制表示。
控制浮点数打印格式浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6 位数字,比如:sprintf(s, "%f", 3.1415926); //产生"3.141593"但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表示打印的宽度,n 表示小数点后的位数。
比如:sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"注意一个问题,你猜int i = 100;sprintf(s, "%.2f", i);会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个:sprintf(s, "%.2f", (double)i);第一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。
而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。