气温读的时候数字用不用大写数字转换器

71在Excel中实现中文大写数字
上亿文档资料,等你来发现
71在Excel中实现中文大写数字
在Excel中实现中文大写数字;时间::42:43作者:风;在与朋友开发表格模板时,为做一个能在Excel中;自动更正法;使用自动更正功能,可以简化用户对大写汉字的输入操;用“自动更正”是最简单易行的,用户可自由、方便地;工作表函数替换法;要做到数值的自动更新,一般都会想到用VB构造函数;我们知道,在Excel中,提供了多种数字的显示格
在Excel中实现中文大写数字 时间: 15:42:43 作者:风筝 阅读172次 在与朋友开发表格模板时,为做一个能在Excel中构造数字的汉字写法(中文大写)的一段VB函数花了不少时间。事后仔细想来,其实实现数字读法的方法实际上至少有三种,即VB编程法、自动更正法及工作表函数的替换法。用VB编程实际上是最复杂的一种方法(但也是一劳永逸的方法),在很多时候完全可以用较简单的方法实现。以下分别介绍这几种方法。自动更正法使用自动更正功能,可以简化用户对大写汉字的输入操作,例如可以将“1//”定义更正为“壹”,那么当要输入“壹”时,就可通过键入“1//”来实现。另外,这种定义以后不仅在Excel中有效,在Word中也同样有效,因为“自动更正”程序是Office组件所公用的。用“自动更正”是最简单易行的,用户可自由、方便地输入要写的大写读法。然而它的局限性也很明显,即它虽然给使用者提供了输入大写数字的方便手段,但终究还是需要人工输入,不能自动、实时地依当前的实际数字结果进行更新。工作表函数替换法要做到数值的自动更新,一般都会想到用VB构造函数法,但其实我们可采用一个简单的方法,即工作表函数的替换法。顾名思义,所谓“工作表函数的替换法”,就是将原来的结果换去一部分。那么换什么,又怎样换?我们知道,在Excel中,提供了多种数字的显示格式。其中文版实际上也包括数字的大写读法显示格式,但遗憾的是这个功能对一般用户来说基本上不能用,因为Microsoft在实现这个数字显示格式时犯了一个小小的错误,例如“33.56”这个数,它显示出来的是“叁拾叁.伍陆”。很显然,没有将小数点作有效处理。虽然这个显示格式是错的,但其劳动成果还是能为我们所用――只要能设法将其小数点作有效处理。做到这一点也并不难,可以先将数字以其内置的中文大写显示格式转变为文本格式,即使用TEXE( )函数将其结果转化为字符串,然后将小数点“.”用汉字“点”换掉(使用SUBSTITUTE( )函数,见图1)。 图1例如,若要将B1单元格内容重写为大写,则可以在单元格中输入如下公式: =SUBSTITUTE(TEXT(B1,″G/通用格式″),″.″,″点″)使用这样一个小小的公式应当说并不复杂,不过,这样做仍不能满足某些情况下的要求,因为使用大写表示数额一般只应用于财会方面,其他很少这么用。在上例中,对数字“33.56”,往往要求结果写为“叁拾叁元伍角陆分”。那么,如何将“33.00”写为“叁拾叁元整”呢实现这一功能的逻辑也不太复杂。我们可以看到,Excel显示格式的小数点前的数字读法是没有错的,可将其取出来作为一个字符串;小数点后面的数字则麻烦些,必取出来,再以低位是否都为“0”来判断是要写“整”还是“零”。还要将“元”、“角”、“分”等字串适当地插入,最后把几个字串连接起来就行了。我们仍将B1单元格内容作格式转化,则具体实现如下:=TEXT(INT(B1),″G/通用格式″)&″元″&IF((INT(B1*10)-INT(B1) *10)=0,″ ″,TEXT(INT(B1*10) - INT (B1) * 10 ,″G/通用格式″) &″角″)&IF((INT(B1*100)-INT(B1*10) *10)=0,″整″,TEXT (INT (B1*100) - INT ( B1*10) *10,″G/通用格式″)&″分″)写这么一长串的公式看来似乎有些吓人,但是,如果在常要修改数据的表中或在模板里以这个方法实现大写汉字显示的话,则以后不但省事而且不易出错。VB编程法的思路可以用VB写一个函数,以后可像Excel的内部函数一样直接被调用,不过这需要熟悉VB编程。在编程过程中可用一般的方法调用VB函数,也可以借用我们前面所列“代换法”中的函数。但前面的公式中用的大多是Excel的工作表函数,在VB中不能直接使用,若非要用,也只能通过层次关系调用它(即用“ApplicationWorksheetFunction”方式调用)。但笔者认为最好自己用VB函数写,因为这样的话,较通用且可移植性好。若只用VB函数,具体方法与代换法也有类似之处,但小数点前的处理要复杂得多,相应的代码也太长。 Excel将小写金额转换成人民币的大写金额 你是第374位浏览者 发布日期:1、如何自定义: 打开EXCEL,新建一个文件Book1,按ALT+F11进入VBA编程环境,选中这个BOOK1文件,插入模块,将下面的源代码复制到右边的模块代码区内,然后将此BOOK1保存,保存类型一定选加载宏,文件名嘛可自由发挥,我就填&中文大写&,确定OK!然后回到EXCEL,工具--加载宏-找到&中文大写&,打勾确定,我们这个自定义函数就可以象内置函数样使用了!---&=rmbdx(),爽吧! 2、例子: A、直接在函数内输入数值的(请注意参数的用法,默认用法是不用输入)=rmbdx()---&
壹拾贰万叁仟肆佰伍拾陆元柒角捌分=rmbdx(,0)---&
壹拾贰万叁仟肆佰伍拾陆元柒角捌分=rmbdx(,1)---&
壹拾贰万叁仟肆佰伍拾陆元柒角捌分=rmbdx(56.78)---&
伍拾陆元柒角捌分=rmbdx(0.78)---&
柒角捌分=rmbdx(0.784)---&
柒角捌分=rmbdx(0.785,1)---&
柒角玖分=rmbdx(0.02,1)---&
贰分B、引用某单元格数值进行转换的假设你的D3单元格的数据(也可以是求和或其它公式得出的结果)需要转换,大写格式放在D4单元格,则D4输入公式:=rmbdx(d3)即可C、其它形如=rmbdx(SUM(C4:C6))的也可以,用法象内置函数,请灵活使用 3、源代码: Function rmbdx(value, Optional m = 0)'中文大写源代码,By 对面男孩、redwin'支持负数,支持小数点后的第三位数是否进行四舍五入处理'默认参数为0,即不将小数点后的第三位数进行四舍五入处理'--On Error Resume NextDim aDim jf As String
'定义角分位Dim j '定义角位Dim f '定义分位If value & 0 Then '处理正负数的情况a = &负&Elsea = &&End If If IsNumeric(value) = False Then '判断待转换的value是否为数值rmbdx = &需转换的内容非数值&Elsevalue = Abs(CCur(value))'当参数m不输入(默认为0)或为0时,小数点后的第三数不进行四舍五入处理'当参数m为1或其它数值时,小数点后的第三数进行四舍五入处理If m = 0 Thenjf = Fix((value - Fix(value)) * 100)value = Fix(value) + jf / 100Else '厘位进行四舍五入实践很少用到,但还是要照顾到value = Application.WorksheetFunction.Round(value, 2) '--&这句是关键!只用round有bugjf = Round((value - Fix(value)) * 100, 0)End IfIf value = 0 Or value = && Then '当待转换数值为0或空时,不进行转换rmbdx = &&Elsestrrmbdx = Application.WorksheetFunction.Text(Int(value), &[DBNum2]&) & &元& '转换整数位
If Int(value) = 0 Thenstrrmbdx = &&End IfIf Int(value) && value ThenIf jf & 9 Then '判断小数位j = Left(jf, 1)f = Right(jf, 1)Elsej = 0f = jfEnd If If j && 0 And f && 0 Then '角分位都有时jf = Application.WorksheetFunction.Text(j, &[DBNum2]&) & &角& _& Application.WorksheetFunction.Text(f, &[DBNum2]&) & &分&Else'处理出现零几分的情况If Int(value) = 0 And j = 0 And f && 0 Thenjf = Application.WorksheetFunction.Text(f, &[DBNum2]&) & &分&ElseIf j = 0 Then '有分无角时jf = &零& & Application.WorksheetFunction.Text(f, &[DBNum2]&) & &分&
ElseIf f = 0 Then '有角无分时jf = Application.WorksheetFunction.Text(j, &[DBNum2]&) & &角整&
End IfEnd IfEnd IfEnd Ifstrrmbdx = strrmbdx & jf '组装Elsestrrmbdx = strrmbdx & &整&End If rmbdx = a & strrmbdx '最后成型了,各位MM满意了吧End IfEnd IfEnd Function 关于EXCEL如何把小写数字变成大写数字?提交日期:
浏览: 152例如:1234.56要变为:壹仟贰佰叁拾肆元伍角陆分你可能会这么做,看上去是不是有点怪可能你还会这么做,变成壹仟贰佰叁拾肆.伍陆元整,读起来很不习惯哦现在我给你一个最完美的一个人民币转大写的函数 =IF(B8=0,&&,CONCATENATE(IF(INT(ABS(B8))=0,&&,TEXT(INT(ABS(B8)),&[DBNum2]G/通用格式元&)),IF(INT(MID(RIGHT(FIXED(ABS(B8),2,1),2),1,1))=0,IF(INT(MID(RIGHT(FIXED(B8,2,1),1),1,1))=0,&&,IF(INT(ABS(B8))=0,&&,&零&)),TEXT(INT(MID(RIGHT(FIXED(B8,2,1),2),1,1)),&[DBNum2]G/通用格式角&)),IF(INT(MID(RIGHT(FIXED(B8,2,1),1),1,1))=0,&整&,TEXT(INT(MID(RIGHT(FIXED(B8,2,1),1),1,1)),&[DBNum2]G/通用格式分&))))注:B8改为你想要转换的单元格! 包含各类专业文献、应用写作文书、中学教育、幼儿教育、小学教育、专业论文、文学作品欣赏、71在Excel中实现中文大写数字等内容。
 在Excel 中实现中文大写数字在与朋友开发表格模板时,为做一个能在 Excel 中构造数字的汉字写法(中文大写)的一段 VB 函数花了不少时间.事后仔细想来,其实实现数字...  如何在 EXCEL 中实现数字金额转换成中文大写金额? 工作中经常会遇到这样的转换,特别是做财务工作的朋友,如果手工 录入,很费时间又常常担心出错。 笔者参考了一些...  如何在 EXCEL 中实现数字金额转换成中文大写金额? 工作中经常会遇到这样的转换,特别是做财务工作的朋友,如果手工 录入,很费时间又常常担心出错。 笔者参考了一些...  我们只需把表格中希望显示为中文大写数字区域的格式设置为这种格式即可。我们在用 Excel 处理数据的过程中,特别是会计,大写 金额一栏的输入有些烦琐,但跟 Word 一...  三步实现 Excel 自动输入大写中文数字 工作中,我们经常要用到 Excel 处理财务报表,Excel 强大运算 功能让我们能够准确计算出各种财务数据,但美中不足的是 Excel 不...  这样将 EXCEL 中的数字变成中文大写 2009 年 05 月 31 日 星期日 06:13 (1)单纯数字 右键选该单元格,设置单元格格式,数字,特殊,中文大写 (2)文字和数字...  &&) EXCEL 中数字小写换大写方法二: 在单元格 A2 中输入小写数字 123.12 ...支票中的金额中文大写格式的特殊的要求, 利用 Excel 函数对 H3 进行 公式设置...  在 EXCEL 中选中要输入大写中文的单元格,按下 ctrl+1 快捷键,调出“设置单元格格式” 对话框,如下图所示: 单击“数字”下方的自定义选项,如下图所示: 在类型...  是财务人员在日常工作中的一个难题,虽 然在 EXCEL 中的单元格格式设置中有一个特殊格式中可以转换在中文大写数字,但不能 给出元、角、分整的中文金额特定格式,...如何用pic单片机写DS18B20数字温度传感器的程序_百度知道
如何用pic单片机写DS18B20数字温度传感器的程序
提问者采纳
DS18B20的写工作时序;
NOP();延时2us
DQ_LOW(),j是一个位的变量 for(i=8,9;&#47,0x5b;/先置高电平 NOP();定义数码管显示的4个变量;&#47,0/隔100次;/提取对个位求佘}void delayus(i--);延时45us
DQ_HIGH();/&#47,30);/&#47,0xed,所以要延时500us再退出while } DQ_HIGH();延时2us while(st)/由原理图可得第三个数码管是由RA3控制位选的 delay(10);&#47,45/
delayus(2;//&#47,定义两个字节的变量;因为接收一个数据有8位 {
date=date&gt,3,无论date是什么数与之后只有最低位是有效的;&#47,4);&#47.h&//&#47,10);&#47,5;//宏定义DQ低电平时设为输出状态且RC1端口拉低电平(即DQ_LOW()字符串等同于TRISC1=0且RC1=0)设置数码管的位选为全输出状态 PORTD=0,因为单片机只是读取而不发送任何东西{/void reset(),但一定要大写//&#47,9
0xe6;/i&gt,用if,2);a&/&#47,这时的整形temper就可以是带小数的了;//&#47,8;如date是1或运算后得x06,且输出低电平
delayus(70;&#47,提高精确度 reset();0;/重新拉高;调用获取DS18B20温度程序 /宏定义#define uint unsigned int//500us
get_tem();}void delay(uint x)&#47,RC1=0即设置RC1为输出状态;j--);num&重新复位 write_byte(0xcc),0再定义一个for循环的变量i和接收数据的变量date static bit j,但时间不能太长 PORTD=table1[num2];/ccH,6;&#47,/&#47,3;num&//j&gt,跳过了匹配的ROM指令 write_byte(0x44),因为第一个读回来的是最低位;获取温度指令将数据化为温度给数码管显示的函数{ uchar temp1;1000;/拉到高电平
delayus(4;0;&#47,uchar);/注意code是用在51单片机中的程序储存器中,1);NOP(),6;&#47,a3,提取对最高位千位求模 a2=temper%;//在初始化中要读DS18B20返回的低电平;//num--)/&#47,也叫释放总线
date=date&/因为temp=1表示数据线要置高电平
DQ_LOW();由原理图可得第二个数码管是由RA4控制位选的 delay(10);/定义一个整形一个字符形变量表示微秒{&#47,0x6d;/ temper=(temp2*256+temp1)*0,循环后可得第二个如果是0则直接填
delayus(1;&#47,等于0时不需要或运算;//因为要不断地循环扫描键盘检测是否按下所以要进行死循环 {/NOP();/ temp2=read_byte();//&#47,乘出来的会是取整数精确度不高;/0;因为同时一次从低到高读两个字节,0x7d;/&#47,1),退出while {
DQ_LOW();/NOP();void write_byte(uchar date);/
delayus(50,b,
0x7f.DS18B20数字温度传感器(在I&#47,而这里只读取一次;这几个宏定义为了DQ 是要读和写程序所以直接宏定义可以简化设置输入输出状态#define DQ RC1 &#47,0x86;由原理图可得第四个数码管是由RA2控制位选的 delay(10);/O口上进行总线操作时;//宏定义DQ高电平时设为输入状态(即DQ_HIGH()字符串等同于TRISC1=1)#define DQ_LOW() TRISC1=0;/void main(){ init();1;//&#47,所以要加延时;//只有读回来的数是1时才和或运算,0);/&#47,2,0x4f,0x71;单片机的空指令可以当作1us延时使用;&#47,不好提取就乘以100变成整数再提取 aaa=(temp2*256+temp1)*0;
delayus(4,uchar num3;&#47,跳过了匹配的ROM指令 write_byte(0xbe),但时间不能太长 PORTD=table[num3];&#47,2,f,DS18B20没有返回低电平未有响应
st=1,所以要加延时;&#47,0x87;因为前面定义temper是一个整形的变量;这里面是强制转换的指令 a1=temper&#47,750us&#47,0x20};/调用初始化 while(1)/置低电平
delayus(0;/&#47,如原来是,读取数据要用或运算,c;延迟函数x表示毫秒{
delayus(1;隔20us变更一次/设置配置位const uchar table[]={0x3f;i--)/100;&#47,如果第二个又读回到要放在倒数第二位会不好放,a3;10,不用声明;/同时调用数码管 reset();调用数码管的显示函数(注第一个是显示0)这是从左到右第一个数码管要显示的段选 PORTA=0x20;数码管数字表从0;/DS18B20的读工作时序;0;/&#47,右移1位后得到,&/NOP();NOP(),要在里面有4个变量;NOP(),因为只接了一个不需要配对,a2;/由原理图可得第一个数码管是由RA5控制位选的 delay(10);////&#47,a;750us/45us&#47,0x07,因为我们只显示4个数码管;/&#47,加上或运算移动一位就共8位
DQ_HIGH(),0),所以要加延时;/提取对十位求模 a4=temper%10,pic和51的单片机也可以共用的常量;0,4);1;&#47,4;/NOP();/&#47,里面的date是单片机要发送的数据{ uchar i,/NOP();///延时2us
for(i=8,temp2;单总线的运用;/num--)&#47,又因为原理图上有上拉电阻;/发送完一位后需要把date右移一位才能进行循环,uchar y)/如果等于1,a2,4;&#47,括号里面不用写变量;/重新拉高;&#47,所以要先定义一个变量&#47,注意书写格式/因为是要动态;&#47,不可能一次就确定18b20的存在
st=0;//&#47,30);/&#47,a4);//
disp(a1;延时6us
DQ_HIGH();&#47,因为只接了一个不需要配对;ccH;因为发送一个数据有8位 {
temp=date&0x01,0x79;/同时调用数码管 }}void reset()&#47,0xfd,70us,a2;//&#47.;设置输出先全部关闭 PORTA=0,0x5e;延时20us
if(temp==1)&#47,30//BEH是指接下来我要读你的指令 temp1=read_byte();/0,显示的小带小数点的 PORTA=0x10;发送温度转换指令44H for(num=100,uchar num4)//void delayus(&#47,uchar num2;///DQ=0 /&#47,e;&#47,const是一个常量;//等于1则要超过或循环while语句重新发送给DS18B20响应;NOP();毫秒的延时声明void init(),且等于1 DQ_HIGH();70us&#47,500&#47,但要写在前头
0x66;&#47,这里已经移动过一次了
/先定义一个要显示温度的变量uchar a1;/DS18B20的初始化工作时序而不是单片机的{ uchar st=1;/&#47,uchar num3;&#47,最低位被移走即发送 }}uchar read_byte()/和与;调用数码管的显示函数(注第一个是显示0)这是第二个数码管要显示的段选;///先要确定数据线拉高
NOP();/i&调用数码管的显示函数(注第一个是显示0)这是第三个数码管要显示的段选 PORTA=0x08;30us//调用DS18B20初始化相当复位 write_byte(0xcc);&#47,无显示const uchar table1[]={0延时30us } return (date);把RC1数据线的状态附给状态位j;因为已经有返回响应,temp得到的其实是date的最低的一位
DQ_LOW();void get_tem(),0x7c;&#47,0x6f,8;/ for(a=x;表示temp=0数据线要置低电平
delayus(2;&#47,5,0NOP();//void disp(uchar num1;在初始化时数码管不能显示}void disp(uchar num1;把接收到的数据返回去经单片机}void get_tem()/&#47,0x77;20us可用软件调试仿真的Stopwatch可得20
delayus(70;// for(j=y;将数据线拉低
NOP();延时40us
if(DQ==1)&#47,
0x39;&#47,a4;/0,d;////因上一条程序已化为4位整数;/上面已定义了等同于TRISC1=0,最高位自动补0
date=date|0x80;再将aaa强制转换给整形//因为是要动态;/上面已定义了等同于TRISC1=1即设置RC1为输入状态,else语句把数据从最低位到高一位一位的发送
DQ_HIGH(),这样读取到的数据线高低电平就是j的变化
if(j==1)/先将数据右移一位其实这里只移动7位;//说明date的最低位是1;//b&/a--)
for(b=110;&#47,我们只取小数前两位和后两位__CONFIG(0x3b31);&#47,7;/
delayus(0;定义一个浮点数等于aaa的变量,2),0xef};NOP();将温度转换成十六位温度数据;循环直到st=0为假说明DS18B20已经返回0响应了
delayus(50,确定DS18B20的存在#include&&#47,所以为高电平 NOP();&#47,但时间不能太长 PORTD=table[num4],因为是读所以是一个带返回值的函数;0;/因为RD接的是数码管设置全为输出状态 TRISA=0,则说明是高电平;/&#47,每一个为一个数码管显示的数{ PORTD=table[num1];//&#47,uchar num2,num,附给用浮点数float表示的aaa就可以乘出小数部分 temper=(int)aaa,a4),后两个是小数;/提取对百位求模 a3=temper%100///数码管的扫描函数;/&#47,所以要将最低位或运算放在最高位,发送数据要用与运算)#define uchar unsigned char/因为是要动态;i--)/&#47,7,则at=1;因为同时一次从低到高读两个字节&#47.0625;拉高
NOP();&#47,所以要加延时;&#47,&#47,a3;
for(num=20;延时750us
DQ_HIGH();/&#47,uchar num4);////微秒的延时声明void delay(uint x),数码管闪一次
disp(a1;定义一个状态位;定义一个for循环的变量和发送数据中的一个位的变量 DQ_HIGH();/b--).;调用数码管的显示函数(注第一个是显示0)这是第四个数码管要显示的段选 PORTA=0x04;////uchar read_byte();i&///因为是要动态;带小数点的0;&#47,转换成十进制还需要乘以0,是下面的指令的变量/循环st=0为假说明DS18B20已经返回0响应了确定存在;延时4us
j=DQ;嵌套}void init(){ TRISD=0,也叫释放总线}void write_byte(uchar date)/ for(i=x;进行判断如果等于1;&#47,因为或运算相当于右移;/&gt,10),1,b;宏定义DQ等同于RC1这个端口#define DQ_HIGH() TRISC1=1 &#47
提问者评价
来自:求助得到的回答
其他类似问题
您可能关注的推广回答者:
数字温度传感器的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁相关软件免费下载:
相关资讯教程阅读:
本类人气榜&总人气榜
本月下载榜&总下载榜
Copyright &
AllRights Reserved冀ICP备第5课 小写转大写,数字转符号课件_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
&&¥6.00
&&¥0.50
&&¥1.00
喜欢此文档的还喜欢
第5课 小写转大写,数字转符号课件
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:2.64MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 数字大写转换 的文章

 

随机推荐