C#实现数字转换汉字的示例详解

   2023-02-09 学习力0
核心提示:目录实践过程效果代码实践过程效果代码public partial class Form1 : Form{public Form1(){InitializeComponent();}public static string CNumToCh(string x){//数字转换为中文后的数组 string[] num = new string[] { "零", "壹", "贰", "叁", "肆", "

实践过程

效果

C#实现数字转换汉字的示例详解

代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public static string CNumToCh(string x)
    {
        //数字转换为中文后的数组 
        string[] num = new string[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
        //为数字位数建立一个位数组 
        string[] digit = new string[] { "", "拾", "佰", "仟" };
        //为数字单位建立一个单位数组 
        string[] units = new string[] { "", ",万,", ",亿,", ",万亿," };
        string returnValue = ""; //返回值 
        int finger = 0; //字符位置指针 
        int m = x.Length % 4; //取模 
        int k = 0;
        if (m > 0)
            k=x.Length / 4 + 1;
        else
            k=x.Length / 4;
        //外层循环,四位一组,每组最后加上单位: ",万亿,",",亿,",",万," 
        for (int i = k; i > 0; i--)
        {
            int L = 4;
            if (i == k && m != 0)
                L = m;
            //得到一组四位数 
            string four = x.Substring(finger, L);
            int l = four.Length;
            //内层循环在该组中的每一位数上循环  
            for (int j = 0; j < l; j++)
            {
                //处理组中的每一位数加上所在的位 
                int n = Convert.ToInt32(four.Substring(j, 1));
                if (n == 0)
                {
                    if (j < l - 1&& Convert.ToInt32(four.Substring(j + 1, 1)) > 0 && !returnValue.EndsWith(num[n]))
                        returnValue += num[n];
                }
                else
                {
                    if (!(n == 1 && (returnValue.EndsWith(num[0]) | returnValue.Length == 0) && j == l - 2))
                        returnValue += num[n];
                    returnValue += digit[l - j - 1];
                }
            }
            finger += L;
            //每组最后加上一个单位:",万,",",亿," 等 
            if (i < k) //如果不是最高位的一组 
            {
                if (Convert.ToInt32(four) != 0)
                    //如果所有4位不全是0则加上单位",万,",",亿,"等 
                    returnValue += units[i - 1];
            }
            else
            {
                //处理最高位的一组,最后必须加上单位 
                returnValue += units[i - 1];
            }
        }
        return returnValue;
    } 

    private void button1_Click(object sender, EventArgs e)
    {
        if (txtStr.Text.Trim() == "")
        {
            return;
        }
        else
        {
            if (txtStr.Text.Trim().Length > 16)
            {
                MessageBox.Show("数字金额太大!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                if (txtStr.Text.Trim().Substring(0, 1) == "0")
                {
                    MessageBox.Show("请正确输入金额!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    richTextBox1.Text = CNumToCh(txtStr.Text.Trim());
                }
            }
        }
    }

    private void txtStr_KeyPress(object sender, KeyPressEventArgs e)
    {
        if((e.KeyChar!=8&&!char.IsDigit(e.KeyChar))&&e.KeyChar!=13)
        {
            MessageBox.Show("请输入数字!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            txtStr.Text = "";
            txtStr.Focus();
        }
    }
}
partial class Form1
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.label2 = new System.Windows.Forms.Label();
        this.label1 = new System.Windows.Forms.Label();
        this.button1 = new System.Windows.Forms.Button();
        this.richTextBox1 = new System.Windows.Forms.RichTextBox();
        this.txtStr = new System.Windows.Forms.TextBox();
        this.SuspendLayout();
        // 
        // label2
        // 
        this.label2.AutoSize = true;
        this.label2.Location = new System.Drawing.Point(17, 53);
        this.label2.Name = "label2";
        this.label2.Size = new System.Drawing.Size(65, 12);
        this.label2.TabIndex = 8;
        this.label2.Text = "转换结果:";
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Location = new System.Drawing.Point(17, 15);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(65, 12);
        this.label1.TabIndex = 7;
        this.label1.Text = "输入数字:";
        // 
        // button1
        // 
        this.button1.Location = new System.Drawing.Point(329, 11);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(75, 23);
        this.button1.TabIndex = 5;
        this.button1.Text = "开始转换";
        this.button1.UseVisualStyleBackColor = true;
        this.button1.Click += new System.EventHandler(this.button1_Click);
        // 
        // richTextBox1
        // 
        this.richTextBox1.Location = new System.Drawing.Point(79, 53);
        this.richTextBox1.Name = "richTextBox1";
        this.richTextBox1.Size = new System.Drawing.Size(325, 131);
        this.richTextBox1.TabIndex = 9;
        this.richTextBox1.Text = "";
        // 
        // txtStr
        // 
        this.txtStr.Location = new System.Drawing.Point(79, 12);
        this.txtStr.Name = "txtStr";
        this.txtStr.Size = new System.Drawing.Size(244, 21);
        this.txtStr.TabIndex = 6;
        this.txtStr.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtStr_KeyPress);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(414, 196);
        this.Controls.Add(this.richTextBox1);
        this.Controls.Add(this.txtStr);
        this.Controls.Add(this.label2);
        this.Controls.Add(this.label1);
        this.Controls.Add(this.button1);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
        this.MaximizeBox = false;
        this.MinimizeBox = false;
        this.Name = "Form1";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "数字大小写转换";
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.Label label2;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.RichTextBox richTextBox1;
    private System.Windows.Forms.TextBox txtStr;
}
原文地址:https://zhima.blog.csdn.net/article/details/128306693
 
标签: C# 数字 汉字
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

点击排行