突然要用到这个功能.也网上找了下. 最后还是自动动手写了一个.

估计这个还是有人要要的,所以顺便发出来吧.

引用保留 https://www.cnblogs.com/goldli/p/14105832.html

using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Text.RegularExpressions; namespace TruckScale.Common
{
/// <summary>
/// 将数字转为大写
    /// <remarks>https://www.cnblogs.com/goldli/p/14105832.html</remarks>
/// </summary>
class ConvertToChineseMoney
{
private static Dictionary<char, string> _dic;
private static Dictionary<int, string> _units; private void Init()
{
_dic = new Dictionary<char, string>
{
{'0', "零"},
{'1', "壹"},
{'2', "贰"},
{'3', "叁"},
{'4', "肆"},
{'5', "伍"},
{'6', "陆"},
{'7', "柒"},
{'8', "捌"},
{'9', "玖"}
};
_units = new Dictionary<int, string>
{
{1,""},
{2,"拾"},
{3,"佰"},
{4,"仟"},
{5,"万"},
{6,"拾"},
{7,"佰"},
{8,"仟"},
{9,"亿"},
{10,"拾"},
{11,"佰"},
{12,"仟"},
{13,"万"},
{14,"亿"}
};
} private ConvertToChineseMoney()
{
Init();
} public static ConvertToChineseMoney Ins { get; } = new ConvertToChineseMoney(); /// <summary>
/// 对整数部分进行操作
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
private string ConvertIntegers(string source)
{
/*
示例:
120 5002
1002 5002
100 5002
*/
var totalLen = source.Length; //总长度
var g = totalLen / 4; //中国数字以4个数字为一组。 这里取模。结果为 多出 的部分.
var r = totalLen % 4; //取模后,得到的余数 var parts = new string[r > 0 ? g + 1 : g];
if (r > 0) //此时表示 不能整除
{
parts[0] = source.Substring(0, r); //取出 for (var i = 0; i < g; i++)
{
parts[i + 1] = source.Substring(i * 4 + r, 4); //取出
}
}
else
{
for (var i = 0; i < parts.Length ; i++)
{
parts[i] = source.Substring(i * 4, 4); //取出
}
} var result = new StringBuilder(); for (var i = 0; i < parts.Length; i++)
{
var part = parts[i];
var m0 = Regex.Match(part, "0{2,}"); //查找是否存在多个连续 0 的情况
if (m0.Success) //存在连续的多个 0, 如: 1002
{
var index = m0.Index; /*
-----------------简化代码见下面-----------------
if (index == 0) // 00 开头
{
result.Append("零");
totalLen -= 2;
// 00后面的部分
for (var n = index + 2; n < 4; n++)
{
result.Append($"{_dic[part[n]]}{_units[totalLen]}");
totalLen--;
}
}
else
{
// 00前面的部分
for (var n = 0; n < index; n++)
{
result.Append($"{_dic[part[n]]}{_units[totalLen]}");
totalLen--;
}
result.Append("零");
totalLen-=2;
// 00后面的部分
for (var n = index + 2; n < 4; n++)
{
result.Append($"{_dic[part[n]]}{_units[totalLen]}");
totalLen--;
}
}
*/ if (index > 0)
{
for (var n = 0; n < index; n++)
{
result.Append($"{_dic[part[n]]}{_units[totalLen]}");
totalLen--;
}
} result.Append("零");
totalLen -= m0.Length; for (var n = index + m0.Length; n < 4; n++)
{
result.Append($"{_dic[part[n]]}{_units[totalLen]}");
totalLen--;
}
}
else
{
var x = part.Length;
var y = part.TrimEnd('0').Length;//数字尾部的 0
if (y == 0)
{
result.Append("零"); //0.95 的 0
totalLen--;
}
else if (y != x)
{
for (var m = 0; m < y; m++)
{
result.Append($"{_dic[part[m]]}{(part[m] == '0' ? "" : _units[totalLen])}"); //part[m] == '0' 零后面不需要 进制单位
totalLen--;
} result.Append($"{_units[4 * (parts.Length - i - 1) + 1]}");
totalLen--;
}
else
{
for (var m = 0; m < y; m++)
{
result.Append($"{_dic[part[m]]}{(part[m] == '0' ? "" : _units[totalLen])}");
totalLen--;
}
}
}
} return result.ToString();
} public string Convert(double d)
{
var ret = new StringBuilder(); var source = d.ToString(CultureInfo.CurrentCulture);
var dotIndex = source.IndexOf('.'); if (dotIndex > 0)//有小数
{
var integerPart = source.Substring(0, dotIndex);
ret.Append(ConvertIntegers(integerPart))
.Append("点"); var decimalPart = source.Substring(dotIndex + 1, source.Length - dotIndex -1);
foreach (var c in decimalPart)
{
ret.Append($"{_dic[c]}");
}
}
else
{
ret.Append(ConvertIntegers(source));
} return ret.ToString();
} }
}

用法 就简了.

            var s1 = ConvertToChineseMoney.Ins.Convert(278449980.95);
var s2 = ConvertToChineseMoney.Ins.Convert(0.95);
var s3 = ConvertToChineseMoney.Ins.Convert(1205020);
var s4 = ConvertToChineseMoney.Ins.Convert(1205002);
var s5 = ConvertToChineseMoney.Ins.Convert(1200052);
var s6 = ConvertToChineseMoney.Ins.Convert(10025002);
var s76 = ConvertToChineseMoney.Ins.Convert(100001734);

[原创] C# 金额大写的更多相关文章

  1. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  2. 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包

            微信支付教程系列之现金红包           最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...

  3. 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付

    微信支付教程系列之扫码支付                  今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...

  4. 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付

    微信支付教程系列之公众号支付         今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...

  5. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  6. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  7. GJM : C#设计模式汇总整理——导航 【原创】

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  8. 信息安全-5:RSA算法详解(已编程实现)[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6120389.html 背景介绍 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加 ...

  9. Atitit.你这些项目不都是模板吗?不是原创  集成和整合的方式大总结

    Atitit.你这些项目不都是模板吗?不是原创  集成和整合的方式大总结 1.1. 乔布斯的名言:创新即整合(Creativity is just connecting things).1 1.2. ...

随机推荐

  1. animation关键帧动画语法

    基本声明和用法 @-webkit-keyframes NAME-YOUR-ANIMATION { 0% { opacity: 0; } 100% { opacity: 1; } } @-moz-key ...

  2. linx 内核 并发与同步 1

    内核并发来源: 1.硬件中断和异常:中断服务程序和被中断的进程可能发生并发访问资源 2.软中断和tasklet,软中断和taklet随时都可能倍调度执行,从而打断当前正在执行 进程的上下文. 3.内核 ...

  3. linux开机启动及运行级别、root密码丢失、单用户模式只读的处理方法

    linux系统启动大致步骤如下:  加电自检-->根据BIOS中的设置从指定的设备启动-->找到设备MBR中的bootloader引导启动系统-->启动kernel-->启动i ...

  4. asyncio多进程+pyppeteer浏览器控制+pyquery解析实现爬虫demo

    import asyncio from pyppeteer import launch from pyquery import PyQuery as pq async def main(): brow ...

  5. c++11-17 模板核心知识(八)—— enable_if<>与SFINAE

    引子 使用enable_if<>禁用模板 enable_if<>实例 使用Concepts简化enable_if<> SFINAE (Substitution Fa ...

  6. 重闯Sqli-labs关卡第一天(1-4关)

    前言 之前暑假闯了很多关但是最近刷BUGku的题 遇到SQL注入题就凉... 垃圾的我只能继续硬着头皮重新再来学习,再来闯. 第一关:字符型注入 字符型注入就是注入点的数据类型是字符型.字符型注入与数 ...

  7. python多线程——如何停止一个死循环的线程

    进程想要执行任务就需要依赖线程.换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程. 那什么是多线程?提到多线程这里要说两个概念,就是串行和并行,搞清楚这个,我们才能更好地理解多 ...

  8. 这篇SpringBoot整合JSON的学习笔记,建议收藏起来,写的太细了

    前言 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. 简洁和清晰 ...

  9. 如何在Vegas中安装激活Continuum插件

    视频剪辑插件Boris FX Continuum安装程序包含了多达250种插件.而视频剪辑软件Vegas Pro 18 Suite中提供了Boris FX Continuum Film Style U ...

  10. css3系列之animation实现逐帧动画

    上面这个两个简单的动画,是用 animation-timing-function: steps();  这个属性实现的,具体如何实现,看下面: 这上面的图片,也就是我们的素材, 有些人,可能不是很理解 ...