红包
◆ [2024-12-22 星期日 15:51] ◆
您来自:3.149.251.22,欢迎您访问風雲工作室。
◆
收藏本站
◆ | ◆
设为首页
◆
联系站长(腾讯QQ)
5029111 [風雲]
〓
站长当前离线
〓
首 页
论坛交流
游戏频道
无忧脚本
旧版论坛
云服务器
聊 天 室
自助链接
来访记录
访客留言
搜索提供
位置:
風雲工作室
-
论坛交流
-
技术专栏
-
脚本中心
- 【摆擂】数字按阅读方法转成中文
返回
主题:【摆擂】数字按阅读方法转成中文
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(1楼)
【摆擂】数字按阅读方法转成中文
在中软国际(湖南)的机试题,不限开发语言,当然,他们招聘的是Java或.NET开发人员,所以最好用java或C#实现。
要求:
1、判断是否为空
2、判断格式是否正确。
3、超过99999999999为数值溢出。
4、编写Round方法实现阅读“精度”,四舍五入,不允许使用语言内置的Round函数。(注意,不是小数点后的四舍五入,小数被忽略)
5、有无对零的处理。
6、编写简要文档说明
7、其他不计分的要求:实现接口、异常类等等
<!doctype><html><head> <title>数字转中文</title> <script type="text/javascript"> onload = function() { var ipt = document.getElementsByTagName("input")[0]; var span = document.getElementsByTagName("span")[0]; var div = document.getElementsByTagName("div")[0]; var slt = document.getElementsByTagName("select")[0]; for(var i = 1; i < 13; i++) slt.options.add(new Option("精度" + i, i)); slt.value = 12; slt.onchange = function(){ ipt.value = ipt.value; } ipt[!ipt.filters ? "oninput" : "onpropertychange"] = function() { try{ Verify(ipt.value); } catch(err) { span.innerHTML = ""; div.innerHTML = err.message; return; } span.innerHTML = ToChinese(ipt.value, slt.value); div.innerHTML = ""; } } function Verify(value, div) { if(!value) throw new Error("数值不能为空。"); if(!value.match(/^(0|[1-9]\d*)?(\.\d+)?$/)) throw new Error("请正确输入数值。"); if(/^\d{13,}/.test(value)) throw new Error("数值越界。"); } function ToChinese(value, cnt) { value = Round(value, cnt); var strA = "零壹贰叁肆伍陆柒捌玖"; var strB = "拾佰仟万亿兆"; var has0 = false; // 判断上一个字符是否是0。 var ret = ""; var offset = 0; for(var i = 0; i < value.length; i++) { if(i == 5) offset += 4; // 到万,返回从十开始 if(i == 8) offset -= 1; // 不存在万万,由千跳至亿。 if(i == 9) offset += 5; // 到亿,返回从十开始 var strNum = value.charAt(value.length - 1 - i); // i>0、数值不是0或者达到万位或亿位时添加进位。 if(i > 0 && strNum > 0 || i == 4 || i == 8) ret = strB.charAt(i - 1 -offset) + ret; // 出现过零且当前仍然是零时则跳过 if(has0 && strNum < 1) continue; has0 = strNum < 1; ret = strA.charAt(strNum) + ret; } return ret.replace(/^(.+?)零$/, "$1").replace("亿万", "亿").replace(/零(万|亿)/g, "$1零"); } function Round(value, cnt) { value = value.split(".")[0]; // 如果精度大于字符长度,不处理。 if(value.length <= cnt) return value; // 判断cnt位是否大于4 var isBig = value.charAt(cnt) > 4; var cntZero = value.length - cnt; value = value.substr(0, cnt) - 0; value += isBig ? 1 : 0; var arr = new Array; arr.length = cntZero + 1; return value + arr.join("0"); } </script></head><body> <input /> <select></select> <span></span> <div></div> </body></html>
[您可以先修改代码再运行]
有点复杂,最后面用了三个证则表达式来打补丁。
風雲工作室
时间:
2010年9月13日 21:42:08
IP:
已记录
引用
回复
Rimifon
★☆☆☆☆☆☆☆☆☆
积分:285
发帖:317
登录:2024/3/26
注册:2006/6/28
(2楼)
王连兵同学的作品,使用正则,处理的相当不错。未做合法性校验和精度处理。
<!doctype><html><head> <title>数字转中文</title> <script type="text/javascript"> onload = function() { var ipt = document.getElementsByTagName("input")[0]; var span = document.getElementsByTagName("span")[0]; var div = document.getElementsByTagName("div")[0]; ipt[!ipt.filters ? "oninput" : "onpropertychange"] = function() { span.innerHTML = ToChinese(ipt.value); div.innerHTML = ""; } } function ToChinese(strNum) { var daXie = '零壹贰叁肆伍陆柒捌玖'.split(''); var danWei = ' 拾佰仟'.split(''); var fenJi = ' 万亿兆'.split(''); var arr = strNum.replace(/(\d)(?=(?:\d{4})+$)/g,"$1,").split(',').reverse(); var result = []; for(var i = 0,count = arr.length;i<count;i++) { result.push(fun(arr[i],fenJi[i])) } return result.reverse().join(''); function getDaXie(num,d) { if(num == "_") return ""; return (num == "0") ? daXie[num] :daXie[num]+d; } function g(num,c) { var result = ""; for(var i=0;i<num;i++) result+=c; return result; } function fun(num,fen) { num = num.replace(/(0+)$/g,function($0,$1) {return g($1.length,"_");}); num = num.replace(/(0+)/g,function($0,$1){return g($1.length-1,"_")+"0";}); var arr = num.split('').reverse(); var result = []; if(num=="0000" || num == "____") fen = ""; for(var i = 0,count = arr.length;i<count;i++) { result.push(getDaXie([arr[i]],danWei[i])); } return result.reverse().join('').replace(' ','')+fen; } } </script></head><body> <input /> <span></span> <div></div> </body></html>
[您可以先修改代码再运行]
另外,查阅相关资料,兆位的使用历史,数值不一,目前在中国被定义为100万。所以,基本上应避免兆的使用。
風雲工作室
时间:
2010年9月19日 11:42:13
IP:
已记录
引用
回复
© Copyright 2006-2024,
風雲工作室
All rights reserved.
【
湘ICP备05009306号
】
QQ登录
操作 1 个库,连接 3 次,执行 8 次,耗时 2219 毫秒。