| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
李想:演算自己的
网站互动的数字化
4个数字的混合运算
一个最简便的代码
猜数字游戏--AS处
一句话限制Flash中
安全:10个常用数
在TEXT文本框中只
货币数字转化为大
将阿拉伯数字转成

将数字用中文读出来           

将数字用中文读出来

作者:佚名 来源:闪吧 作者: cong_wang1 更新:2007-1-13 20:46:25 错误报告 我要投稿

最初我想了一个方法:就是把这个数字先切分成整数和小数,然后整数部分按大单位切分,比如 亿 万 然后 再单独读取小数部分。 这样做的话 实际在添加大单位的时候每个段的读法都是一样的 比如 12345678 1234(一千二百三十肆) 5678(五千六百七十八)然后两个字段加一个(万) 这样就能读出来了 但是当我在实际写的时候却发现:我忽略了零的情况......于是在做到:

//获得随机数
var nums:Number = random(1000000000);
trace("该数字为: "+nums);
//将随机数转换为字符串对象
var k:String = nums.toString();
trace("转换为字符串后为: "+k);
//获得该数的长度
var kl:Number = k.length;
trace("总共长度为: "+kl);
//kl除以4求余来计算该加的单位
//******
//获得该分的段数
var duanshu:Number = Math.ceil(kl/4);
trace("该分为 "+duanshu+" 段");
//求余获得最前面的一段
var fd:Number = kl%4;
trace("分段的第一段为 "+fd+" 位");
//取出第一段的值
//在这个基础上每4位开始分割
var zid:Array=[];
for (var i = 0; i<duanshu; i++) {
var tem1=fd+4*(i-1)
var tem2=fd+4*i
zid[i]=k.substring(tem1,tem2)
trace(zid[i]+" "+tem1+" "+tem2)
}
}//zid记录切割后的字段

就只能打住了。 重新考虑思考的方向
后来重新想的思路如下 :
对于一个数字 56789365.123 比如这个吧 读作:5千6百7十8万9千3百6十5 点 123
仔细看看 大得思路还是不变的 分割成整数和小数部分 然后分开读
这里整数部分 我是这么想的:
5

6
六十五
3
三百六十五
9
玖千三百六十五
8
捌万玖千三百六十五
.......
看明白了没? 读出相应的数 然后加上各自的单位。 然后我们来考虑有“0”的情况
比如:1000001
1

0
零十一
0
零百零十一
......
这个地方如果在零十一到了下一次的时候 只要检测是否是0 如果是0 就去掉读出数据的前两位 这样就ok了~
于是得到了下面的代码:(具体不再说明了 思路都有了 慢慢的看吧)
function Transform(whole:Number) {
//将whole转换成为字符串
var whole_st = whole.toString(10);
//分离整数与小数
var zf:Array = whole_st.split(".");
trace("整数:"+zf[0]+" 小数:"+zf[1]);
//求出整数的长度
var len:Number = zf[0].length;
trace("整数长度为: "+len);
//定义单位数组
//****************
//大单位
var dw2:Array = ["", "万", "亿"];
//小单位
var dw1:Array = ["拾", "佰", "千"];
//整数部分用
var dw:Array = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
//小数部分用
var dws:Array = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
//*****************
var k0:Number = 0;
//计小单位
var k1:Number = 0;
//计大单位
var k2:Number = 0;
var str:String = "";
for (var i = 1; i<=len; i++) {
var n:String = zf[0].charAt(len-i);
trace(n);
if (n == "0") {
k0++;
if (k1 != 0) {
str = str.substr(1, str.length);
trace(str+" *");
}
//endif
} else {
k0 = 0;
}
//endifelse
if (k0<=1) {
str = dw[Number(n)]+str;
trace(str);
}
//endif
if (len-i-1>=0) {
if (k1 != 3) {
str = dw1[k1]+str;
k1++;
} else {
k1 = 0;
var temp:String = str.substr(0, 2);
if (temp == "万" || temp == "亿") {
str = str.substr(0, 2);
trace(str+" **");
}
//endif
str = dw2[k2]+str;
}
//endifelse
}
//endif
if (k1 == 3) {
k2++;
}
//endif
}
//endfor
var strdig:String = "";
for (var i = 0; i<zf[1].length; i++) {
var m:String = zf[1].charAt(i);
strdig += dws[Number(m)];
}
//endfor
if (zf[1].length>0) {
str = str+"点"+strdig;
}
trace(str);
}
文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。