excel 将数字转化为大写有很多不一样的方法,但算法基本上都是一样的,我还是把这个简单而不明了的公式贴出,小浣熊还找到了其它的公式后面再作详解,我还弄了个公式的流程图,希望能对理解这个公式有点帮助 公式如下:
=”人民币大写:”&IF(ABS(A28)<0.005,””,IF(A28<0,”负”,)&IF(INT(ABS(A28)),TEXT(INT(ABS(A28)),”[dbnum2]”)&”元”,)&IF(INT(ABS(A28)*10)-INT(ABS(A28))*10,TEXT(INT(ABS(A28)*10)-INT(ABS(A28))*10,”[dbnum2]”)&”角”,IF(INT(ABS(A28))=ABS(A28),,IF(ABS(A28)<0.1,,”零“)))&IF(ROUND(ABS(A28)*100-INT(ABS(A28)*10)*10,),TEXT(ROUND(ABS(A28)*100-INT(ABS(A28)*10)*10,),”[dbnum2]”)&”分”,”整”))
这个公式里主要用到了三个大的if 语句,分别用来读取元、角、分中的数的。
1、IF(INT(ABS(A28)),TEXT(INT(ABS(A28)),”[dbnum2]”)&”元”,) 这个if语句是判断有整数就读出整数部分,并把小写转化成大写。
2、IF(INT(ABS(A28)*10)-INT(ABS(A28))*10,TEXT(INT(ABS(A28)*10)-INT(ABS(A28))*10,”[dbnum2]”)&”角”,IF(INT(ABS(A28))=ABS(A28),,IF(ABS(A28)<0.1,,”零”)))这个if 语句前半部分是读出角为上的数(就是角位不为0的时候),有下划线的部分是角位为0的情况,里面有两个if 函数,如果INT(ABS(A28))=ABS(A28)是为真的,那么这个数一定是一个整数,读到元就OK了,为假时,角位上为0又分两种情况,一种是如13.05一种是如0.05的,这时就通过IF(ABS(A28)<0.1,,”零”)来判断,如果ABS(A28)<0.1为真,就是如0.05这样的情况,这时就不用读出角位上的0了,为假时就如130.5的情况就要读出角位上的0了。
3、IF(ROUND(ABS(A28)*100-INT(ABS(A28)*10)*10,),TEXT(ROUND(ABS(A28)*100-INT(ABS(A28)*10)*10,),”[dbnum2]”)&”分”,”整”),这个if 语句是判断分位上的数,如果不为0就读出。如果ROUND(ABS(A28)*100-INT(ABS(A28)*10)*10,)为真,就说明分位上有数存在,就读出来,用TEXT(ROUND(ABS(A28)*100-INT(ABS(A28)*10)*10,),”[dbnum2]”)&”分”显示出来,为假则分位为0就不用读出,只是在第后上加上了一个整字。
4、这里面主要用到了函数说明if的嵌套和简写,abs(x)用来取绝对值的,int(x)用来取整的,round(x,0)相当于round( x,)也是用来取整的,TEXT(value,format_text)函数,是将数值转换为按指定数字格式表示的文本, [dbnum2] 是格式函数,将数字转中文大写的。
5、了解了这些函数再来看下流程图,可能会更明了一些。
注:如果公式直接复制过去用不起,请替换里面的引号”替换成英文输入法状态下的引号,网站上被自动替换成中文状态下的引号了。
流程图如下:
