[原创][分享]数字格式化转换
时间:2010-06-01
来源:互联网
之前用Crystal做了一个数字转English Word的Formula
刚刚心血来潮, 大半个晚上写了JS版本的数字转换, 由于JS的Build-In功能不是很强大,米有数字的格式化等功能,就写了2个Function, 一个做格式化, 一个做数字转英文的操作.
FUNCTION 解释:
formatNbr(src, num, sep, per, mode)
src: 需格式化的数据源,可以是数字或数字字符串
num: 小数部分长度
sep: 千分位标记
per: 小数点标记
mode: 小数部分截取操作 R 四舍五入, C Ceil, 其他相当于Floor
nbrToEngWord(src, sep, per, mode)
src: 格式化过的 数字字符串
sep: 千分位标记
per: 小数点标记
mode: U 大写, L 小写, 其他大小写混合
另: 发贴备份以备后用...

[ 本帖最后由 暗翼飘雪 于 2010-6-1 00:19 编辑 ]
刚刚心血来潮, 大半个晚上写了JS版本的数字转换, 由于JS的Build-In功能不是很强大,米有数字的格式化等功能,就写了2个Function, 一个做格式化, 一个做数字转英文的操作.
FUNCTION 解释:
formatNbr(src, num, sep, per, mode)
src: 需格式化的数据源,可以是数字或数字字符串
num: 小数部分长度
sep: 千分位标记
per: 小数点标记
mode: 小数部分截取操作 R 四舍五入, C Ceil, 其他相当于Floor
nbrToEngWord(src, sep, per, mode)
src: 格式化过的 数字字符串
sep: 千分位标记
per: 小数点标记
mode: U 大写, L 小写, 其他大小写混合
<script type="text/javascript"> var sepStringM=new Array("", "Thousand ", "Million ", "Billion ", "Trillion ", " ", " "); var nbrStringA=new Array(" ", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "); var nbrStringB=new Array("Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "); var nbrStringC=new Array(" ", "Twenty ", "Thirty ", "Fourty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "); alert("数字格式化: 12321231100.2555555 小数带3位四舍五入\n"+formatNbr("12321231100.2555555", 3, "," , ".","R")); alert("数字格式化-德国格式: 12321231100.2555555 小数带3位\n"+formatNbr(12321231100.2555555, 3, "." , ",","F")); alert("全大写E文, 数字是12321231100.2555555, 最多取2位小数转E文\n"+nbrToEngWord(formatNbr(12321231100.2555555, 3, "," , ".","R"),",",".","U")); alert("全小写E文,数字是10001.00\n"+nbrToEngWord(formatNbr(10001.00, 3, "," , ".","R"),",",".","L")); alert("默认大小写混合模式\n"+nbrToEngWord(formatNbr(12321231100.2555555, 3, "," , ".","R"),",",".","")); function nbrToEngWord(src, sep, per, mode){ var int=src.split(per)[0]; var dec=src.split(per)[1]=="undefined"?"00":src.split(per)[1]; var str=""; var tmp=int.split(sep); for (var i=0;i<tmp.length;i++){ if (tmp[i].length==1){ str=str+nbrStringA[parseInt(tmp[i])]+sepStringM[tmp.length-i-1]; } else { if (tmp[i].length==2){ if (tmp[i].substring(0,1)=="1"){ str=str+nbrStringB[parseInt(tmp[i].substring(1,2))]+sepStringM[tmp.length-i-1]; } else { str=str+nbrStringC[parseInt(tmp[i].substring(0,1))]+nbrStringA[parseInt(tmp[i].substring(1,2))]+sepStringM[tmp.length-i-1]; } } else { if (tmp[i].substring(0,1)=="0") { // } else { str=str+nbrStringA[parseInt(tmp[i].substring(0,1))]+"Hundred "; } if (tmp[i].substring(1,2)=="1"){ str=str+nbrStringB[parseInt(tmp[i].substring(2,3))]+sepStringM[tmp.length-i-1]; } else { if (tmp[i].substring(1,2)=="0"){ str=str+nbrStringA[parseInt(tmp[i].substring(2,3))]+sepStringM[tmp.length-i-1]; } else { str=str+nbrStringC[parseInt(tmp[i].substring(1,2))]+nbrStringA[parseInt(tmp[i].substring(2,3))]+sepStringM[tmp.length-i-1]; } } } } } dec=(dec.length>2)?dec.substring(0,2):dec; if (dec.length==1) {dec=dec+"0";} if (dec=="00") { } else { if (dec.substring(0,1)=="1"){ str=str+"And "+nbrStringB[parseInt(dec.substring(1,2))]+"Cents"; } else { if (dec.substring(1,2)=="0") { str=str+"And "+nbrStringA[parseInt(dec.substring(1,2))]+"Cents"; } else { str=str+"And "+nbrStringC[parseInt(dec.substring(0,1))]+nbrStringA[parseInt(dec.substring(1,2))]+"Cents"; } } } switch (mode){ case "U": str=str.toUpperCase(); break; case "L": str=str.toLowerCase(); break; default: break; } return str; } function formatNbr(src, num, sep, per, mode){ var nbr; var cnt; var tmp var int, dec; switch (typeof(src)){ case "string": nbr=src; break; case "number": nbr=src.toString(); break; default: break; } int=nbr.split(".")[0]; dec=typeof(nbr.split(".")[1])=="undefined"?0:nbr.split(".")[1]; cnt=Math.floor((int.length-1)/3); for (var i=cnt;i>0;i--){ int=int.substring(int.length-i*3,0)+sep+int.substring(int.length-i*3,int.length); } if (num>0) { if (dec.length>=num) { switch (mode) { case "R": dec=(Math.round(parseInt(dec)/Math.pow(10, (dec.length-num)))).toString().split(".")[0]; break; case "C": dec=(Math.ceil(parseInt(dec)/Math.pow(10, (dec.length-num)))).toString().split(".")[0]; break; default: dec=dec.substring(0,num); break; } } else { tmp=num-dec.length; for (var i=0;i<tmp;i++){ dec=dec+"0"; } } return int+per+dec; } else { return int; } } </script>
提示:您可以先修改部分代码再运行
应该会有点BUG, 欢迎帮忙改进, 有BUG, 请回帖, 谢谢!提示:您可以先修改部分代码再运行
另: 发贴备份以备后用...

[ 本帖最后由 暗翼飘雪 于 2010-6-1 00:19 编辑 ]
作者: 暗翼飘雪 发布时间: 2010-06-01
还好,支持一下吧。。。谢谢发分享
作者: shbijiben 发布时间: 2010-06-01
嗯,多谢分享。。受益了
作者: iaw2001200 发布时间: 2010-06-01
代码也太长了点吧。支持一下。
作者: togoog 发布时间: 2010-06-04
我就看看
作者: hxz55 发布时间: 2010-06-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28