1 2 3 //测试工程4 5 staticvoidMain(string[] args)6 7 {8 9 Console.WriteLine("请输入金额");10 11 stringinputNum=Console.ReadLine();12 13 while(inputNum!="exit")14 15 {16 17 //货币数字转化类18 19 NumCast nc=newNumCast();20 21 if(nc.IsValidated(inputNum))22 23 {24 25 try26 27 {28 29 stringchineseCharacter=nc.ConvertToChinese(inputNum);30 31 Console.WriteLine(chineseCharacter);32 33 }34 35 catch(Exception er)36 37 {38 39 Console.WriteLine(er.Message);40 41 }42 43 }44 45 else46 47 {48 49 Console.WriteLine("不合法的数字或格式");50 51 }52 53 Console.WriteLine("\n请输入金额");54 55 inputNum=Console.ReadLine();56 57 }58 59 Console.ReadLine();60 61 }62 63 测试结果如下:64 65 货币转化类(NumCast类)功能介绍66 67 1常量的规定68 69 ///70 71 ///数位72 73 ///74 75 publicenumNumLevel { Cent, Chiao, Yuan, Ten, Hundred, Thousand, TenThousand, hundredMillon, Trillion };76 77 ///78 79 ///数位的指数80 81 ///82 83 privateint[] NumLevelExponent=newint[] {-2,-1,0,1,2,3,4,8,12};84 85 ///86 87 ///数位的中文字符88 89 ///90 91 privatestring[] NumLeverChineseSign=newstring[] {"分","角","元","拾","佰","仟","万","亿","兆"};92 93 ///94 95 ///大写字符96 97 ///98 99 privatestring[] NumChineseCharacter=newstring[] {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};100 101 ///102 103 ///整(当没有 角分 时)104 105 ///106 107 privateconststringEndOfInt="整";108 109 2:数字合法性验证,采用正则表达式验证110 111 ///112 113 ///正则表达验证数字是否合法114 115 ///116 117 ///118 119 ///120 121 publicboolIsValidated(T Num)122 123 {124 125 Regex reg=newRegex(@"^(([0])|([1-9]\d{0,23}))(\.\d{1,2})?$");126 127 if(reg.IsMatch(Num.ToString()))128 129 {130 131 returntrue;132 133 }134 135 returnfalse;136 137 }138 139 3: 获取数位 例如 1000的数位为 NumLevel.Thousand140 141 142 143 ///144 145 ///获取数字的数位 使用log146 147 ///148 149 ///150 151 ///152 153 privateNumLevel GetNumLevel(doubleNum)154 155 {156 157 doublenumLevelLength;158 159 NumLevel NLvl=newNumLevel();160 161 if(Num>0)162 163 {164 165 numLevelLength=Math.Floor(Math.Log10(Num));166 167 for(inti=NumLevelExponent.Length-1; i>=0; i--)168 169 {170 171 if(numLevelLength>=NumLevelExponent[i])172 173 {174 175 NLvl=(NumLevel)i;176 177 break;178 179 }180 181 }182 183 }184 185 else186 187 {188 189 NLvl=NumLevel.Yuan;190 191 }192 193 returnNLvl;194 195 }196 197 4:判断数字之间是否有跳位,也就是中文中间是否要加零,例如1020 就应该加零。198 199 ///200 201 ///是否跳位202 203 ///204 205 ///206 207 privateboolIsDumpLevel(doubleNum)208 209 {210 211 if(Num>0)212 213 {214 215 NumLevel?currentLevel=GetNumLevel(Num);216 217 NumLevel?nextLevel=null;218 219 intnumExponent=this.NumLevelExponent[(int)currentLevel];220 221 doublepostfixNun=Math.Round(Num%(Math.Pow(10, numExponent)),2);222 223 if(postfixNun>0)224 225 nextLevel=GetNumLevel(postfixNun);226 227 if(currentLevel!=null&&nextLevel!=null)228 229 {230 231 if(currentLevel>nextLevel+1)232 233 {234 235 returntrue;236 237 }238 239 }240 241 }242 243 returnfalse;244 245 }246 247 5把长数字分割为两个较小的数字数组,例如把9999亿兆,分割为9999亿和0兆,248 249 因为计算机不支持过长的数字。250 251 ///252 253 ///是否大于兆,如果大于就把字符串分为两部分,254 255 ///一部分是兆以前的数字256 257 ///另一部分是兆以后的数字258 259 ///260 261 ///262 263 ///264 265 privateboolIsBigThanTillion(stringNum)266 267 {268 269 boolisBig=false;270 271 if(Num.IndexOf('.')!=-1)272 273 {274 275 //如果大于兆276 277 if(Num.IndexOf('.')>NumLevelExponent[(int)NumLevel.Trillion])278 279 {280 281 isBig=true;282 283 }284 285 }286 287 else288 289 {290 291 //如果大于兆292 293 if(Num.Length>NumLevelExponent[(int)NumLevel.Trillion])294 295 {296 297 isBig=true;298 299 }300 301 }302 303 returnisBig;304 305 }306 307 ///308 309 ///把数字字符串由‘兆’分开两个310 311 ///312 313 ///314 315 privatedouble[] SplitNum(stringNum)316 317 {318 319 //兆的开始位320 321 double[] TillionLevelNums=newdouble[2];322 323 inttrillionLevelLength;324 325 if(Num.IndexOf('.')==-1)326 327 trillionLevelLength=Num.Length-NumLevelExponent[(int)NumLevel.Trillion];328 329 else330 331 trillionLevelLength=Num.IndexOf('.')-NumLevelExponent[(int)NumLevel.Trillion];332 333 //兆以上的数字334 335 TillionLevelNums[0]=Convert.ToDouble(Num.Substring(0, trillionLevelLength));336 337 //兆以下的数字338 339 TillionLevelNums[1]=Convert.ToDouble(Num.Substring(trillionLevelLength ));340 341 returnTillionLevelNums;342 343 }344 345 346 347 6是否以“壹拾”开头,如果是就可以把它变为“拾”348 349 boolisStartOfTen=false;350 351 while(Num>=10)352 353 {354 355 if(Num==10)356 357 {358 359 isStartOfTen=true;360 361 break;362 363 }364 365 //Num的数位366 367 368 NumLevel currentLevel=GetNumLevel(Num);369 370 intnumExponent=this.NumLevelExponent[(int)currentLevel];371 372 Num=Convert.ToInt32(Math.Floor(Num/Math.Pow(10, numExponent)));373 374 if(currentLevel==NumLevel.Ten&&Num==1)375 376 {377 378 isStartOfTen=true;379 380 break;381 382 }383 384 }385 386 returnisStartOfTen;387 388 7合并大于兆连个数组转化成的货币字符串389 390 ///391 392 ///合并分开的数组中文货币字符393 394 ///395 396 ///397 398 ///399 400 privatestringContactNumChinese(double[] tillionNums)401 402 {403 404 stringuptillionStr=CalculateChineseSign(tillionNums[0], NumLevel.Trillion,true, IsStartOfTen(tillionNums[0]));405 406 stringdowntrillionStr=CalculateChineseSign(tillionNums[1],null,true,false);407 408 stringchineseCharactor=string.Empty;409 410 //分开后的字符是否有跳位411 412 if(GetNumLevel(tillionNums[1]*10)==NumLevel.Trillion)413 414 {415 416 chineseCharactor=uptillionStr+NumLeverChineseSign[(int)NumLevel.Trillion]+downtrillionStr;417 418 }419 420 else421 422 {423 424 chineseCharactor=uptillionStr+NumLeverChineseSign[(int)NumLevel.Trillion];425 426 if(downtrillionStr!="零元整")427 428 {429 430 chineseCharactor+=NumChineseCharacter[0]+downtrillionStr;431 432 }433 434 else435 436 {437 438 chineseCharactor+="元整";439 440 }441 442 }443 444 returnchineseCharactor;445 446 }447 448 8:递归计算货币数字的中文449 450 ///451 452 ///计算中文字符串453 454 ///455 456 ///数字457 458 ///数位级别 比如1000万的 数位级别为万459 460 ///是否以‘壹拾’开头461 462 ///中文大写463 464 publicstringCalculateChineseSign(doubleNum, NumLevel?NL ,boolIsDump,boolIsExceptTen)465 466 {467 468 Num=Math.Round(Num,2);469 470 boolisDump=false;471 472 //Num的数位473 474 NumLevel?currentLevel=GetNumLevel(Num);475 476 intnumExponent=this.NumLevelExponent[(int)currentLevel];477 478 stringResult=string.Empty;479 480 //整除后的结果481 482 intprefixNum;483 484 //余数 当为小数的时候 分子分母各乘100485 486 doublepostfixNun ;487 488 if(Num>=1)489 490 {491 492 prefixNum=Convert.ToInt32(Math.Floor(Num/Math.Pow(10, numExponent)));493 494 postfixNun=Math.Round(Num%(Math.Pow(10, numExponent)),2);495 496 }497 498 else499 500 {501 502 prefixNum=Convert.ToInt32(Math.Floor(Num*100/Math.Pow(10, numExponent+2)));503 504 postfixNun=Math.Round(Num*100%(Math.Pow(10, numExponent+2)),2);505 506 postfixNun*=0.01;507 508 }509 510 if(prefixNum<10)511 512 {513 514 //避免以‘壹拾’开头515 516 if(!(NumChineseCharacter[(int)prefixNum]==NumChineseCharacter[1]517 518 &&currentLevel==NumLevel.Ten&&IsExceptTen))519 520 {521 522 Result+=NumChineseCharacter[(int)prefixNum];523 524 }525 526 else527 528 {529 530 IsExceptTen=false;531 532 }533 534 //加上单位535 536 if(currentLevel==NumLevel.Yuan )537 538 {539 540 当为 “元” 位不为零时 加“元”。541 542 if(NL==null)543 544 {545 546 Result+=NumLeverChineseSign[(int)currentLevel];547 548 //当小数点后为零时 加 "整"549 550 if(postfixNun==0)551 552 {553 554 Result+=EndOfInt;555 556 }557 558 }559 560 }561 562 else563 564 {565 566 Result+=NumLeverChineseSign[(int)currentLevel];567 568 }569 570 //当真正的个位为零时 加上“元”571 572 if(NL==null&&postfixNun<1&&currentLevel>NumLevel.Yuan&&postfixNun>0)573 574 {575 576 Result+=NumLeverChineseSign[(int)NumLevel.Yuan];577 578 }579 580 }581 582 else583 584 {585 586 //当 前缀数字未被除尽时, 递归下去587 588 NumLevel?NextNL=null;589 590 if((int)currentLevel>=(int)(NumLevel.TenThousand))591 592 NextNL=currentLevel;593 594 Result+=CalculateChineseSign((double)prefixNum, NextNL, isDump, IsExceptTen);595 596 if((int)currentLevel>=(int)(NumLevel.TenThousand))597 598 {599 600 Result+=NumLeverChineseSign[(int)currentLevel];601 602 }603 604 }605 606 //是否跳位607 608 //判断是否加零, 比如302 就要给三百 后面加零,变为 三百零二。609 610 if(IsDumpLevel(Num))611 612 {613 614 Result+=NumChineseCharacter[0];615 616 isDump=true;617 618 }619 620 //余数是否需要递归621 622 if(postfixNun>0)623 624 {625 626 Result+=CalculateChineseSign(postfixNun, NL, isDump,false);627 628 }629 630 elseif(postfixNun==0&&currentLevel>NumLevel.Yuan )631 632 {633 634 //当数字是以零元结尾的加上 元整 比如1000000一百万元整635 636 if(NL==null)637 638 {639 640 Result+=NumLeverChineseSign[(int)NumLevel.Yuan];641 642 Result+=EndOfInt;643 644 }645 646 }647 648 returnResult;649 650 }651 652 9:外部调用的转换方法。653 654 ///655 656 ///外部调用的转换方法657 658 ///659 660 ///661 662 ///663 664 665 publicstringConvertToChinese(stringNum)666 667 {668 669 if(!IsValidated(Num))670 671 {672 673 thrownewOverflowException("数值格式不正确,请输入小于9999亿兆的数字且最多精确的分的金额!");674 675 }676 677 stringchineseCharactor=string.Empty;678 679 if(IsBigThanTillion(Num))680 681 {682 683 double[] tillionNums=SplitNum(Num);684 685 chineseCharactor=ContactNumChinese(tillionNums);686 687 }688 689 else690 691 {692 693 doubledNum=Convert.ToDouble(Num);694 695 chineseCharactor=CalculateChineseSign(dNum,null,true, IsStartOfTen(dNum));696 697 }698 699 returnchineseCharactor;700 701 }702 703 704

mysql金额数字转成中文_数字转换成汉字金额(转)相关推荐

  1. mysql金额数字转成中文_数字金额大写转换(可以处理整数,小数,负数)

    数字金额大写转换(可以处理整数,小数,负数) 代码 //数字金额大写转换 function upDigit(n) { var fraction = ['角', '分']; var digit = [' ...

  2. 把数字金额转换成中文大写数字

    //把数字金额转换成中文大写数字 function changeNumMoneyToChinese(money) { var cnNums = new Array("零", &qu ...

  3. 把阿拉伯数字翻译成中文大写数字

    package com.zcw.zcwbook.demo15;/*** @program: zcwbook* @description: 把阿拉伯数字翻译成中文大写数字* @author: zhaoc ...

  4. 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字

    一.序言:   工具封装第四弹,阿拉伯数字 ===> 转换成 ===> 中文大写数字,喜欢就赶紧收藏+点赞+关注吧 !!! ---- Nick.Peng 二.实现代码如下: #!/usr/ ...

  5. 将一组阿拉伯数字转换成中文大写数字

    题目大概:  将一组阿拉伯数字转换成中文大写数字  52306 ==> 伍万贰千叁百零陆 我实现了将文件中的一组数字(每行为一个数)  形如: Java代码   25364 466932300 ...

  6. C# 将小写数字转换为 一般中文大写数字 和 人民币大写数字

    网络转载 class DigitToChnText {     private readonly char[] chnGenText;     private readonly char[] chnG ...

  7. java大数转换成字符串,js字符串转换成数字与数字转换成字符串的实现方法

    摘要:这篇JavaScript栏目下的"js字符串转换成数字与数字转换成字符串的实现方法",介绍的技术点是"js字符串.字符串转换.实现方法.数字转换.字符串.转换&qu ...

  8. mfc 中文乱码转换为正常中文_中文编码转换

    中文编码转换--6种编码30个方向的转换 1.问题提出 在学编程序时,曾经有人问过"你可以编一个记事本程序吗?"当时很不屑一顾,但是随着学习MFC的深入,了解到记事本程序也并非易事 ...

  9. 写一段代码将a_b_ _c_ _ _d_转换成_ _ _ _ _ _ _abcd

    写一段代码将a_b_ _c_ _ _d_转换成_ _ _ _ _ _ _abcd; int main(int argc, const char * argv[]) {char str[20];int ...

最新文章

  1. 基于tcp和udp的socket实现
  2. oracle12c无法访问em精简版,Oracle12C的EM无法访问怎么办?
  3. OSPF的route-id选举
  4. git 常用命令 方法大全
  5. 第五期 RHCE远程班 12月1日开课(周末班)
  6. Spring boot maven 搭建框架
  7. 命令执行漏洞-命令执行-漏洞位点- 代码注入-漏洞利用-联合执行-Bypass(空格,关键字过滤,变量绕过)-例题两道-actf2020exec-GXYCTF2019 Ping Ping Ping
  8. Different Integers
  9. 【C++编程技巧】函数多个返回值
  10. iOS:定制自适应大小的透明吐司弹框
  11. IntelliJ IDEA 使用教程
  12. WordPress 跨站请求伪造漏洞
  13. snagit 10.0.1.58和Patch_SnagIt.exe汉化补丁安装流程图
  14. NASA数据批量下载——wget
  15. 用Python实现一个软件自动升级系统
  16. mysql recordcount_[已解决]为什么RecordCount的值为-1??
  17. 仿QQ音乐下载歌曲头部导航
  18. Sigmod 和 Logit
  19. ActionScript 3.0 杂乱笔记3
  20. webview进行下载踩坑记录

热门文章

  1. css fix 手机端,移动端布局fixed问题解决方案
  2. java string 常量池_用了这么久Java String,你真的懂字符串常量池吗?
  3. 基于反射机制的服务代理调用
  4. Linux网络编程 之 无连接和有连接通信(二)
  5. Java的io类的使用场景
  6. Google怎么做(1.相关提示)
  7. jQuery——siblings()方法
  8. 我们讨论的是《战争之城》的一个简单版本。如果地图上只有空旷的空间,河流,钢墙和砖墙。你的任务是尽快得到奖金,假设没有敌人会打扰你(见下图) 你的坦克不能穿过河流和墙壁,但它可以通过射击摧毁砖墙。当你击
  9. 【测试点2分析】:1020 月饼 (25分)(甲级 1070 Mooncake (25 分))
  10. 【详细解读】进程管理 -死锁问题 系统有三个进程:A B C 这3个进程都需要5个系统资源。如果系统至少有多少个资源,则不可能发生死锁