首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

新人刚自己写的人民币转换大小写,比较简短,希望各位能理解,支持的顶啊 (顶的就有分)解决方案

2012-03-20 
新人刚自己写的人民币转换大小写,比较简短,希望各位能理解,支持的顶啊! (顶的就有分)新人刚自己写的人民币

新人刚自己写的人民币转换大小写,比较简短,希望各位能理解,支持的顶啊! (顶的就有分)
新人刚自己写的人民币转换大小写,比较简短,希望各位能理解,支持的顶啊! 

C# code
using System.Text;namespace MoneytoChinese{        class Test    {        static void Main()        {            for (; ; )            {                System.Console.Write("金额: ");                string s = System.Console.ReadLine();                decimal m = 450002030.05m;                try { m = decimal.Parse(s); }                catch { //break;                 }                System.Console.WriteLine("大写: "+MoneytoChinese(m));            }        }        public static string MoneytoChinese(decimal money)        {            string ChineseMoney = "";            string[] snum = new string[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };            string[] sdanwei = new string[] { "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };            long lastnum;            int i = 0;            for (long tmpmoney = (long)(money * 100); tmpmoney >= 1; tmpmoney /= 10)            {                lastnum = tmpmoney % 10;                ChineseMoney = snum[lastnum] + sdanwei[i++] + ChineseMoney;            }            ChineseMoney = ChineseMoney.Replace("零角", "零");            ChineseMoney = ChineseMoney.Replace("零零分", "");            ChineseMoney = ChineseMoney.Replace("零分", "");            ChineseMoney = ChineseMoney.Replace("零拾", "零");            ChineseMoney = ChineseMoney.Replace("零佰", "零");            ChineseMoney = ChineseMoney.Replace("零仟", "零");            ChineseMoney = ChineseMoney.Replace("零零", "零");            ChineseMoney = ChineseMoney.Replace("零零", "零");            ChineseMoney = ChineseMoney.Replace("零元", "元");            ChineseMoney = ChineseMoney.Replace("零万", "万");            ChineseMoney = ChineseMoney.Replace("零亿", "亿");            ChineseMoney = ChineseMoney.Replace("亿万", "亿");            return ChineseMoney;        }    }}


(山之魂原创,著作权所有,转贴须经本人同意!)


[解决办法]
look
[解决办法]
^ō^ 板凳...
[解决办法]
顶。不错。不过网上有好多了
[解决办法]
不正确。
[解决办法]
好象有个正则表达式,挺经典的
[解决办法]
C# code
// 例如:(new Money(200)).ToString() == "贰佰元"namespace Skyiv.Util{  using System.Text;  class Test  {    static void Main()    {      for (;;)      {        System.Console.Write("金额: ");        string  s = System.Console.ReadLine();        decimal m;        try   { m = decimal.Parse(s); }        catch { break; }        System.Console.WriteLine("大写: " + new Money(m));      }    }  }  // 该类重载的 ToString() 方法返回的是大写金额字符串  class Money  {    public string Yuan  = "元";                        // “元”,可以改为“圆”、“卢布”之类    public string Jiao  = "角";                        // “角”,可以改为“拾”    public string Fen   = "分";                        // “分”,可以改为“美分”之类    static string Digit = "零壹贰叁肆伍陆柒捌玖";      // 大写数字    bool   isAllZero    = true;                        // 片段内是否全零    bool   isPreZero    = true;                        // 低一位数字是否是零    bool   Overflow     = false;                       // 溢出标志    long   money100;                                   // 金额*100,即以“分”为单位的金额    long   value;                                      // money100的绝对值    StringBuilder sb    = new StringBuilder();         // 大写金额字符串,逆序    // 只读属性: "零元"    public string ZeroString    {      get { return Digit[0] + Yuan; }    }    // 构造函数    public Money(decimal money)    {      try   { money100 = (long)(money * 100m); }      catch { Overflow = true; }      if (money100 == long.MinValue) Overflow = true;    }    // 重载 ToString() 方法,返回大写金额字符串    public override string ToString()    {      if (Overflow) return "金额超出范围";      if (money100 == 0) return ZeroString;      string [] Unit = { Yuan, "万", "亿", "万", "亿亿" };      value = System.Math.Abs(money100);      ParseSection(true);      for (int i = 0; i < Unit.Length && value > 0; i++)      {        if (isPreZero && !isAllZero) sb.Append(Digit[0]);        if (i == 4 && sb.ToString().EndsWith(Unit[2]))          sb.Remove(sb.Length - Unit[2].Length, Unit[2].Length);        sb.Append(Unit[i]);        ParseSection(false);        if ((i % 2) == 1 && isAllZero)          sb.Remove(sb.Length - Unit[i].Length, Unit[i].Length);      }      if (money100 < 0) sb.Append("负");      return Reverse();    }    // 解析“片段”: “角分(2位)”或“万以内的一段(4位)”    void ParseSection(bool isJiaoFen)    {      string [] Unit = isJiaoFen ?        new string [] { Fen, Jiao } :        new string [] { "", "拾", "佰", "仟" };      isAllZero = true;      for (int i = 0; i < Unit.Length && value > 0; i++)      {        int d = (int)(value % 10);        if (d != 0)        {          if (isPreZero && !isAllZero) sb.Append(Digit[0]);          sb.AppendFormat("{0}{1}", Unit[i], Digit[d]);          isAllZero = false;        }        isPreZero = (d == 0);        value /= 10;      }    }    // 反转字符串    string Reverse()    {      StringBuilder sbReversed = new StringBuilder();      for (int i = sb.Length - 1; i >= 0; i--)        sbReversed.Append(sb[i]);      return sbReversed.ToString();    }  }} 


[解决办法]
上次看见Q_282898034(我为编程狂)写的,是我见过最短的!! 

C# code
using System.Text.RegularExpressions;string s = 10104.00.ToString(    "#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");string d = Regex.Replace(s,     @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|" +     @"((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");Console.WriteLine(d + "\r\n" +     Regex.Replace(d, ".", delegate(Match m)     {         return "负圆x零壹贰叁肆伍陆柒捌玖xxxxxxx分角拾佰仟万亿兆京垓秭穰"            [m.Value[0] - '-'].ToString();     }    ));
[解决办法]
谁能解释一下8楼代码的意思?
[解决办法]
正则表达式的,看着头大
顶,接分~~~~~
[解决办法]
LZ的程序在数字过大(比如“壹亿亿元”)时会出错:
C# code
System.Console.WriteLine("大写: "+MoneytoChinese(10000000000000000m));
[解决办法]
LZ的程序在小于“壹亿亿元”时我测试过的情形都是对的。
[解决办法]
C# code
               if (i > 17)               // 可以改成:               if (i > 18)
[解决办法]
这样就行了:

C# code
        public static string MoneytoChinese(decimal money)         {            if (money >= 10000000000000000m)               return "不好意思,钱太多了,我眼花了头晕了算不过来了";            //  ....         }
[解决办法]
另外,楼主的程序也没有考虑负数的情形。
[解决办法]
在方法的开头加上:
C# code
            if (money >= 10000000000000000m)
[解决办法]
狂顶。
[解决办法]
呵呵。不错,写得简单易懂啊。
[解决办法]

[解决办法]
look
[解决办法]
不错,LZ坚持
[解决办法]
up

[解决办法]
ding

[解决办法]
收藏
[解决办法]
顶吧顶吧不是罪。
[解决办法]
顶我来拿分的
[解决办法]
支持
[解决办法]


[解决办法]
顶!学习!

[解决办法]
8楼的 短小却精悍啊
[解决办法]
UP~
------解决方案--------------------


我也看过[我为编程狂]写的那个转换,
确实NB~
[解决办法]
顶了,学习好多的东西
[解决办法]
我为编程狂 的版本最强悍,不过,最近好像没看到他。。。
[解决办法]
up,
学习一哈!
[解决办法]
这个好
using System.Text.RegularExpressions;

string s = 10104.00.ToString(
"#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
string d = Regex.Replace(s, 
@"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|" + 
@"((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
Console.WriteLine(d + "\r\n" + 
Regex.Replace(d, ".", delegate(Match m) 

return "负圆x零壹贰叁肆伍陆柒捌玖xxxxxxx分角拾佰仟万亿兆京垓秭穰"
[m.Value[0] - '-'].ToString(); 
}
)
);

[解决办法]
8楼的够强悍!
[解决办法]
这个是用友的面试题
[解决办法]
好帖,收藏
[解决办法]
顶一下!
[解决办法]
我顶。。。作为新人,我们一起好好加油
[解决办法]
我顶顶顶。。。这样的程序我在网上也见过
[解决办法]
肯定顶啊,就是要支持这样的东西,楼主没事的话完善哈子,以后就直接借用啦。
[解决办法]
呵呵 ,顶!有钱花就好!
[解决办法]
mark
[解决办法]
顶!
[解决办法]
既然来了,就顶一下吧、
[解决办法]
据说有分,就路过一下

很多年前也写过,思路和楼主差不多,都是用替换。。。

MoneytoChinese(12) = 壹拾贰元
理想的是:"拾贰圆整"
[解决办法]
-_-!!! 角和分也没处理。。。。
-------
嘻嘻嘻 伴水 清洁工 看帖要回帖 嘻嘻嘻嘻

[解决办法]
一个郁闷中的新人飘过

为什么可用分那么少
[解决办法]
什么东东哦
[解决办法]
支持8楼 
mark 正则 的 钱钱
顶搂主
[解决办法]

我去公司面试的时候也有这道题
忘了当时怎么写的了
跟楼主不太一样。。
[解决办法]
ChineseMoney = ChineseMoney.Replace("零角", "零");
ChineseMoney = ChineseMoney.Replace("零零分", "");
ChineseMoney = ChineseMoney.Replace("零分", "");
ChineseMoney = ChineseMoney.Replace("零拾", "零");
ChineseMoney = ChineseMoney.Replace("零佰", "零");
ChineseMoney = ChineseMoney.Replace("零仟", "零");


ChineseMoney = ChineseMoney.Replace("零零", "零");
ChineseMoney = ChineseMoney.Replace("零零", "零");
ChineseMoney = ChineseMoney.Replace("零元", "元");
ChineseMoney = ChineseMoney.Replace("零万", "万");
ChineseMoney = ChineseMoney.Replace("零亿", "亿");
ChineseMoney = ChineseMoney.Replace("亿万", "亿");
楼主如果还想程序段的话,把后面replace的两个参数保存到两个数组里,然后用循环处理就更短了。
[解决办法]
有没有人想用二叉树解决这个问题呢?
[解决办法]
接分,嘿嘿
[解决办法]
要支持.
[解决办法]
mark
[解决办法]
up
[解决办法]
路过接分!
[解决办法]
接分...
[解决办法]
嗯,不错。
[解决办法]
那正则那强啊。
[解决办法]
up~
[解决办法]
收藏~
[解决办法]
为人民币标记一下
[解决办法]

[解决办法]
接分,正则表达式比较合理。
[解决办法]
顶一个

[解决办法]
看不懂```
[解决办法]
这么实用的东东,为什么不顶?
[解决办法]


点击查阅

js脚本_小写金额转换成大写(支持千分位格式及负数输入,整数部分可达44位-千正~元,小数部分可达5位-角~丝) 
AmountInWords(dValue, maxDec)
[解决办法]
8楼的正则表达式很好很强大 学习
[解决办法]
顶。
[解决办法]
学习
[解决办法]
抢个100楼:)

热点排行