C#将货币金额数字转大写汉字

这篇具有很好参考价值的文章主要介绍了C#将货币金额数字转大写汉字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、对输入数字的处理

二、源码

1、Main()

2.类库


一、对输入数字的处理

        用正则表达式对输入的数字判断是否符合货币格式,小数点前的数字串的长度是否不大于13。文章来源地址https://www.toymoban.com/news/detail-802359.html

二、源码

1、Main()

// 货币金额小写数字转大写汉字
// 小数点前数字长度<=13,即不超过十亿
using System.Text.RegularExpressions;

namespace NumtoUpperChinese
{
    partial class Program
    {
        /// <summary>
        /// 判断输入的是否货币格式,是否小数点前<=13,
        /// </summary>
        /// <param name="args"></param>
        private static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
            Console.WriteLine("请输入要判断的字符串(货币格式)");
            string input = Console.ReadLine()!.ToString();
            
            if (input!="") 
            {
                bool isValidFormat = IsValidCurrencyFormat(input);
                if (isValidFormat)
                {
                    Console.WriteLine(NumtoUpper.MoneyToUpper(input));
                }
                else
                {
                    Console.WriteLine("输入的货币格式无效");
                }

            }
            else
            {
                Console.WriteLine("输入数字不能空,请重新输入!", "提示");
            }
        }
        static bool IsValidCurrencyFormat(string input)
        {
            Regex regex = MyRegex();      // 定义正则表达式模式
            return regex.IsMatch(input);    // 返回匹配结果
        }

        [GeneratedRegex(@"^\d{0,13}(\.\d+)?$")]
        private static partial Regex MyRegex();
    }
}
//运行结果:
/*
请输入要判断的字符串(货币格式)
9999999999999.99
玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖圆玖角玖分

 */

2.类库

// 类库
namespace NumtoUpperChinese
{
    internal static class NumtoUpper
    {
        /// <summary>
        /// 金额转换成中文大写金额
        /// </summary>
        /// <param name="LowerMoney">eg:10.74</param>
        /// <returns></returns>
        public static string MoneyToUpper(string LowerMoney)
        {           
            string? ReturnValue;
            bool IsNegative = false; // 是否是负数
            if (LowerMoney.Trim()[..1] == "-")
            {
                // 是负数则先转为正数
                LowerMoney = LowerMoney.Trim().Remove(0, 1);
                IsNegative = true;
            }
            string? strLower;
            string? strUpart = null;
            string? strUpper;
            int iTemp;
            // 保留两位小数 123.489→123.49  123.4→123.4
            LowerMoney = Math.Round(double.Parse(LowerMoney), 2).ToString();
            if (LowerMoney.IndexOf('.') > 0)
            {
                if (LowerMoney.IndexOf('.') == LowerMoney.Length - 2)
                {
                    LowerMoney += ('0');
                }
            }
            else
            {
                LowerMoney += ".00";
            }
            strLower = LowerMoney;
            iTemp = 1;
            strUpper = "";
            while (iTemp <= strLower.Length)
            {
                switch (strLower.Substring(strLower.Length - iTemp, 1))
                {
                    case ".":
                        strUpart = "圆";
                        break;
                    case "0":
                        strUpart = "零";
                        break;
                    case "1":
                        strUpart = "壹";
                        break;
                    case "2":
                        strUpart = "贰";
                        break;
                    case "3":
                        strUpart = "叁";
                        break;
                    case "4":
                        strUpart = "肆";
                        break;
                    case "5":
                        strUpart = "伍";
                        break;
                    case "6":
                        strUpart = "陆";
                        break;
                    case "7":
                        strUpart = "柒";
                        break;
                    case "8":
                        strUpart = "捌";
                        break;
                    case "9":
                        strUpart = "玖";
                        break;
                }

                strUpart = iTemp switch
                {
                    1 => strUpart + "分",
                    2 => strUpart + "角",
                    3 => strUpart + "",
                    4 => strUpart + "",
                    5 => strUpart + "拾",
                    6 => strUpart + "佰",
                    7 => strUpart + "仟",
                    8 => strUpart + "万",
                    9 => strUpart + "拾",
                    10 => strUpart + "佰",
                    11 => strUpart + "仟",
                    12 => strUpart + "亿",
                    13 => strUpart + "拾",
                    14 => strUpart + "佰",
                    15 => strUpart + "仟",
                    16 => strUpart + "万",
                    _ => strUpart + "",
                };
                strUpper = strUpart + strUpper;
                iTemp++;
            }

            strUpper = strUpper.Replace("零拾", "零");
            strUpper = strUpper.Replace("零佰", "零");
            strUpper = strUpper.Replace("零仟", "零");
            strUpper = strUpper.Replace("零零零", "零");
            strUpper = strUpper.Replace("零零", "零");
            strUpper = strUpper.Replace("零角零分", "整");
            strUpper = strUpper.Replace("零分", "整");
            strUpper = strUpper.Replace("零角", "零");
            strUpper = strUpper.Replace("零亿零万零圆", "亿圆");
            strUpper = strUpper.Replace("亿零万零圆", "亿圆");
            strUpper = strUpper.Replace("零亿零万", "亿");
            strUpper = strUpper.Replace("零万零圆", "万圆");
            strUpper = strUpper.Replace("零亿", "亿");
            strUpper = strUpper.Replace("零万", "万");
            strUpper = strUpper.Replace("零圆", "圆");
            strUpper = strUpper.Replace("零零", "零");

            // 对壹圆以下的金额的处理
            if (strUpper[..1] == "圆")
            {
                strUpper = strUpper[1..];
            }
            if (strUpper[..1] == "零")
            {
                strUpper = strUpper[1..];
            }
            if (strUpper[..1] == "角")
            {
                strUpper = strUpper[1..];
            }
            if (strUpper[..1] == "分")
            {
                strUpper = strUpper[1..];
            }
            if (strUpper[..1] == "整")
            {
                strUpper = "零圆整";
            }
            ReturnValue = strUpper;

            if (IsNegative == true)
            {
                return "负" + ReturnValue;
            }
            else
            {
                return ReturnValue;
            }
        }
    }
}

到了这里,关于C#将货币金额数字转大写汉字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET神器:轻松实现数字转大写金额的秘籍与示例代码

      概述: .NET中实现数字转大写金额可通过现有库或自定义方法。自定义方法示例使用递归将数字分段转换为中文大写金额,处理了千、百、十、个位数。实际应用中可根据需求进一步扩展,例如处理小数部分或负数。 在.NET中,你可以使用以下方案之一来实现将数字转成大写

    2024年03月14日
    浏览(42)
  • js小写金额转大写 自动转换

    话不多说 直接贴代码 MVVM 就是 Model-View-ViewModel 的缩写,MVVM 将视图和业务逻辑分开。 View:视图层,Model 数据模型,而 ViewModel 是把两者建立通信的桥梁。 在 MVVM 框架下,View 和 Model 之间没有直接的联系,而是通过 ViewModel 进行交互。View 和 ViewModel 之间以及 Model 和 ViewModel 之

    2024年02月16日
    浏览(82)
  • 【C语言】P166 10.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

    P166 10.有一篇文章,共有3行文字,每行有80个字符。要求分别 统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数   运行结果:  

    2024年02月04日
    浏览(65)
  • js将数字金额转换成中文金额格式

    在开发中我们经常会遇到处理数字的问题,下面介绍一种处理数字金额转换为中文金额的方式: 我们通常使用三种书面数字系统:全球使用的阿拉伯数字系统和两种本地数字系统(繁体、简体)。常规时我们使用阿拉伯数字(1,2,3等),但在某些情况中,如金融中我们会使

    2024年02月16日
    浏览(38)
  • javascript数字转中文大写

    有时候业务需要做大写【一二三四五六七八九十】的标题,那对于js普通的数据结构排序是按【0123456789】。所以我们需要做一些数字的转换,实现小写转大写才能满足业务需求。

    2024年02月11日
    浏览(49)
  • C#汉字转拼音_Microsoft.PinYinConverter汉字转拼音

    C#汉字转拼音_Microsoft.PinYinConverter汉字转拼音 一、Microsoft.PinYinConverter 引入 1.Nuget命令引入 2.Nuget包管理引入  Nuget连接地址:NuGet Gallery | Microsoft.PinYinConverter 1.0.0 二、Microsoft.PinYinConverter 使用介绍 ChineseChar使用案例: 多音字返回多个读音,最后一位代表声调,每次只能转换一个

    2024年02月04日
    浏览(61)
  • JavaScript中 将阿拉伯数字转为汉字

    在JavaScript中,可以使用以下代码将阿拉伯数字转换为汉字: 这段代码中,我们首先定义了两个数组: digits 和 units ,分别代表数字和单位。然后,我们将输入的数字转换成字符串,并逐个处理每一位数字。如果当前数字为0,我们不需要输出汉字,但需要考虑上一个数字是否

    2024年02月16日
    浏览(51)
  • C语言——大写字母转小写输出

    输入一个大写字母,需要输出对应的小写 用到的是字符类型,字符数据以ASCII码存储的,形式与整数的存储形式相同 所以使用如下代码: 会输出65,解题关键就在输出前把字符类型 + 32 即可得到对应小写

    2024年02月05日
    浏览(69)
  • PTA-c语言 输出大写英文字母

    本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。 输入格式: 输入为一个以回车结束的字符串(少于80个字符)。 输出格式: 按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包