当前位置:  编程技术>.net/c#/asp.net

C#把数字转换成大写金额的代码实例

    来源: 互联网  发布时间:2014-10-30

    本文导语:  实现代码: 代码如下:// 例如:(new Money(200)).ToString() == "贰佰元"namespace Skyiv.Util {    using System.Text;    class Test {        static void Main() {            for (;;) {                System.Console.Write("金额: ");        ...

实现代码:

代码如下:

// 例如:(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();
        }
    }
}

    
 
 

您可能感兴趣的文章:

  • c#判断输入内容是否数字的代码
  • c#实现TextBox只允许输入数字
  • C# 验证码一例(随机数字加字母)
  • C#实现将千分位字符串转换成数字的方法
  • c#判断输入的是不是数字的小例子
  • C# 正则判断一个数字的格式是否有逗号的代码
  • C#实现在两个数字之间生成随机数的方法
  • c#中判断字符串是不是数字或字母的方法
  • C# WinForm窗体编程中处理数字的正确操作方法
  • C#实现根据数字序号输出星期几的简单实例
  • C# 大数字运算的小例子
  • C# 判断字符串第一位是否为数字或中文的代码
  • C# 判断字符串第一位是否为数字
  • C# 判断是否为数字的方法二则
  • C#实现大数字运算的实例代码
  • C# 实现只能输入数字的文本框
  • c# 正则表达式 验证数字的方法
  • c# 数字转换中文字符的代码
  • c# 验证数字和日期的方法与实现代码
  • C# 将阿拉伯数字转换为大写中文的代码
  • 急救:如何在jsp中将阿拉伯数字转换成中文大写,如:'1228008.98' 转换为 '壹佰贰拾贰万扒仟零扒圆玖角扒分'各位大虾给看看,一定给分!!
  • 阿拉伯数字转大写中文_财务常用sql存储过程
  • 数字金额大写转换器制作代码分享(人民币大写转换)
  • PHP把数字转成人民币大写的函数分享
  • C# 数字(英文)货币转换为大写的方法
  • 使用C#实现阿拉伯数字到大写中文的转换
  • 有人能提供一个Java版的数字金额转换成大写金额的程序吗?
  • awk的数字计算,能指为long long 64位整数么? iis7站长之家
  • 这是一个数字转化为中文大写的程序,但缺转化小数部分,谁帮我添上?给高分!!(两位小数)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 数字签名,数字签名,数字签名!!
  • java实现判断字符串是否全是数字的四种方法代码举例
  • asp正则表达式匹配数字$数字$数字$
  • 高手请赐招:数字签名与数字认证的区别,尤其是概念上的区别。谢谢!
  • 请问linux用户名能否用数字?怎么才能用数字开头呢?
  • 请教:Java 中数字字符串转化为数字的问题
  • awk的数字运算中,数字变量的值的范围多少?
  • jquery禁止输入数字以外的字符的示例(纯数字验证码)
  • 对applet坐数字签名后,如果重新用jar对applet打包,需要重新做applet数字签名吗?
  • 请问,用c如何将一串数字字符转换成数字
  • 只能是字母或数字或者是字母和数字的组合的正则previousSibling
  • 请问Java中如何在控制台一行内输入n个数字,然后再在一行内输出这些数字
  • sql server 字段 全角数字转半角数字的代码分享
  • c语言中怎样从字母和数字组成的字符串中提取数字?
  • 如何让IE认识applet所带的数字签名,而不是让证书仓库认识这个带数字签名的applet,就是说不装jdk也可以在IE里面使用带有签名的applet,详情请进
  • php生成随机字符串(自定义纯数字、纯字母或数字字母混合)
  • 关于数字签名的几点疑问??另:csdn的数字签名帖子我都看过,不要介绍给我,我是诚心提问!!
  • python实现猜数字游戏(无重复数字)示例分享
  • awk的数字计算,能指为long long 64位整数么?
  • 数字空间系统 DSpace


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3