网上很多人民币数字转换成人民币大写的算法,但是,按照财务的规则,没有一个是对的。

于是我按照财务的规则重新写了一次这个逻辑

首先来看财务的大写人民币规则

(一) 阿拉伯数字中间有“0”时,中文大写金额中间可以只写一个“零”字。如¥1,409.50,应写成人民币壹仟肆佰零玖元伍角。 (二) 阿拉伯数字中间连续有几个“0”,中文大写金额中间可以只写一个“零”字,如¥6,007.14,应写成人民币陆仟零柒元壹角肆分。 (三) 阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但仟位、角位不是“0”时,中文大写金额中可以只写一个零字,也可以不写“零”字,如¥1,680.32,应写成人民币壹仟陆佰捌拾元零三角贰分,或者写成人民币壹仟陆佰捌拾元三角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万柒仟元伍角叁分。 (四) 阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。如¥16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾元零肆分。

C#代码有点区别,但是经过测试是没有问题的

(代码中包含了 小写转换,例如 1709.5 会转换成¥1709.50 )

private string TryConverRMBCharToChar(string p) { string RMBStr = ""; double money; if (double.TryParse(p, out money)) { double temp= money*100; string cent = (temp % 10).ToString(); temp/= 10; string _10cent = temp>=1?((int)(temp % 10)).ToString():(cent == "¥"||cent == string.Empty?string.Empty:"¥"); temp/=10; string yuan = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10cent == "¥" || _10cent == string.Empty ? string.Empty : "¥"); temp /= 10; string _10 = temp >= 1 ? ((int)(temp % 10)).ToString() : (yuan == "¥" || yuan == string.Empty ? string.Empty : "¥"); temp /= 10; string _100 = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10 == "¥" || _10 == string.Empty ? string.Empty : "¥"); temp /= 10; string _K = temp >= 1 ? ((int)(temp % 10)).ToString() : (_100 == "¥" || _100 == string.Empty ? string.Empty : "¥"); temp /= 10; string _10K = temp >= 1 ? ((int)(temp % 10)).ToString() : (_K == "¥" || _K == string.Empty ? string.Empty : "¥"); temp /= 10; string _100K = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10K == "¥" || _10K == string.Empty ? string.Empty : "¥"); temp /= 10; string _M = temp >= 1 ? ((int)(temp % 10)).ToString() : (_100K == "¥" || _100K == string.Empty ? string.Empty : "¥"); temp /= 10; string _10M = temp >= 1 ? ((int)(temp % 10)).ToString() : (_M == "¥" || _M == string.Empty ? string.Empty : "¥"); temp /= 10; string _100M = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10M == "¥" || _10M == string.Empty ? string.Empty : "¥"); label100M.Text = label100MCopy.Text = _100M.ToString(); label10M.Text = label10MCopy.Text = _10M.ToString(); labelM.Text = labelMCopy.Text = _M.ToString(); label100K.Text = label100KCopy.Text = _100K.ToString(); label10K.Text = label10KCopy.Text = _10K.ToString(); labelK.Text = labelKCopy.Text = _K.ToString(); label100.Text = label100Copy.Text = _100.ToString(); label10.Text = label10Copy.Text = _10.ToString(); labelYuan.Text = labelYuanCopy.Text = yuan.ToString(); label10Cent.Text = label10CentCopy.Text = _10cent.ToString(); labelCent.Text = labelCentCopy.Text = cent.ToString(); if (!string.IsNullOrEmpty(_100M) && _100M != "¥") { if (_100M == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_100M) + "亿"; } } if (!string.IsNullOrEmpty(_10M) && _10M != "¥") { if (_10M == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_10M) + "仟"; } } if (!string.IsNullOrEmpty(_M) && _M != "¥") { if (_M == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_M) + "佰"; } } if (!string.IsNullOrEmpty(_100K) && _100K != "¥") { if (_100K == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_100K) + "拾"; } } if (!string.IsNullOrEmpty(_10K) && _10K != "¥") { if (_10K == "0") { RMBStr += "万零"; } else { RMBStr += ConverRMBNOToStr(_10K) + "万"; } } if (!string.IsNullOrEmpty(_K) && _K != "¥") { if (_K == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_K) + "仟"; } } if (!string.IsNullOrEmpty(_100) && _100 != "¥") { if (_100 == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_100) + "佰"; } } if (!string.IsNullOrEmpty(_10) && _10 != "¥") { if (_10 == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_10) + "拾"; } } if (!string.IsNullOrEmpty(yuan) && yuan != "¥") { if (yuan == "0") { RMBStr += "元零"; } else { RMBStr += ConverRMBNOToStr(yuan) + "元"; } } if (!string.IsNullOrEmpty(_10cent) && _10cent != "¥") { if(_10cent == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_10cent) + "角"; } } if (!string.IsNullOrEmpty(cent) && cent != "¥") { if (cent == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(cent) + "分"; } } if (string.IsNullOrEmpty(cent) || cent == "0") { RMBStr += "整"; } RMBStr = RemoveZero(RMBStr); RMBStr = RemoveLastZero(RMBStr); } return RMBStr; } private string RemoveLastZero(string RMBStr) { if (RMBStr.Substring(RMBStr.Length - 1) == "零") { return RMBStr.Remove(RMBStr.Length - 1); } else return RMBStr; } private string RemoveZero(string RMBStr) { if (RMBStr.IndexOf("零零") > 0) { RMBStr = RMBStr.Replace("零零", "零"); return RemoveZero(RMBStr); } else if (RMBStr.IndexOf("零万零") > 0) { RMBStr = RMBStr.Replace("零万零", "万零"); return RemoveZero(RMBStr); } else if (RMBStr.IndexOf("零元零") > 0) { RMBStr = RMBStr.Replace("零元零", "元零"); return RemoveZero(RMBStr); } else if (RMBStr.IndexOf("零整") > 0) { RMBStr = RMBStr.Replace("零整", "整"); return RemoveZero(RMBStr); } else { return RMBStr; } } private string ConverRMBNOToStr(string p) { switch (p) { case "1": return "壹"; break; case "2": return "贰"; break; case "3": return "叁"; break; case "4": return "肆"; break; case "5": return "伍"; break; case "6": return "陆"; break; case "7": return "柒"; break; case "8": return "捌"; break; case "9": return "玖"; break; default: return " "; break; }

真正正确的人民币 小写 大写 转换算法相关推荐

  1. 工具篇——MoneyFormatUtil(用于将人民币小写金额转换成大写金额)

    写代码的四点: 1.明确需求.要做什么? 2.分析思路.要怎么做?(1,2,3--) 3.确定步骤.每一个思路要用到哪些语句.方法和对象. 4.代码实现.用具体的语言代码将思路实现出来. 学习新技术的 ...

  2. 小写大写转换_小写到大写转换器JavaScript工具| 网络应用项目

    小写大写转换 Hi! At times, beginners always find it hard getting the application of the theory they learn ...

  3. 人民币数字大写转换 java实现 [附源码]

    动机 业务系统开发的报表中经常需要将人民币数值转换为大写,所以江苏南大先腾java研发框架中写了一个通用的大写转换函数.由于报表的数值一般比较大所以在java开发中不建议使用float或者int类型, ...

  4. c语言如何实现人民币转换编程,如何实现人民币的大写转换?

    dim str(9) str(0)="零" str(1)="壹" str(2)="贰" str(3)="叁" str(4 ...

  5. java中人民币的符号怎么打_Java学习笔记---字符串操作(人民币大写转换的实现)...

    向开始学习语言的的同学们推荐下,如果你想学习语言的某个特性,比方说数据库编程,或者网络编程,最好找一个实用的例子,然后不懂的去翻书,去查资料,这样目的性就很强了,个人感觉比对着语法书敲上面的例子效率要 ...

  6. 人民币数字大小写转换

    人民币数字大写转换 include <iostream> include <iostream> include <string> include <stdli ...

  7. c语言人民币小写转换成大写,C语言实现人民币小写转大写

    这个是很早之前用C语言实现的人民币小写转大写的方法 /************************************************************************* ...

  8. java人民币大小写转换_Java 实现人民币小写转大写[转载http://sunjun.blogchina.com/]

    Java实现人民币小写转大写 import java.io.*; import java.util.*; import java.lang.*; public class money { public ...

  9. php大写转为小写,PHP 实现人民币小写转换成大写的方法及大小写转换函数

    php 的 PHP 实现人民币小写转换成大写的方法及大小写转换函数 下面一段代码给大家分享php实现人民币大小写转换的方法,具体代码如下所示: header("charset=utf-8;& ...

最新文章

  1. MATLAB 结构型变量
  2. VTK:重新采样附加的 PolyData用法实战
  3. C语言 通用工具库 stdlib.h
  4. linux ppp拨号 USB,linux下ppp拨号上网
  5. 深入学习之mysql(二)表的操作
  6. Qcom平台添加 Camera 驱动(msm8953)
  7. 让“施工进度计划”真正产生价值——不是为了做计划而计划
  8. 信息检索方法和步骤——怎样展开信息检索?
  9. 软件项目开发中各岗位职责
  10. 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档...
  11. 【阶段总结】大四上学期总结
  12. 腾讯开源云原生成本优化神器 - FinOps Crane
  13. GlobalSign 企业型SSL 证书
  14. 【花雕体验】05 搭建行空板开发环境之SSH连接与Jupyter编程
  15. MySQL-语句块-循环语句
  16. 项目管理 :PMO三种角色
  17. 【Python】根据多个列同时进行多条件筛选数据
  18. Codeforces Round #601 (Div. 2)B. Fridge Lockers
  19. HCNA静态路由配置
  20. 简单的部门递归兰巴达写法

热门文章

  1. 物品丢失成为人们头痛的问题,苹果Find My帮助我们更好找到物品
  2. MacOS更新BigSur后git不可用的问题
  3. python发短信sim800_玩转 ESP32 + Arduino (十八) 采用SIM800L发送短信和定位(基础知识)...
  4. 苹果M3处理器跑分曝光 Max性能提升24%
  5. 《校园封神榜》典型用户及其场景描述
  6. 一篇“从入门到上手”的Solidworks机械设计教程
  7. python循环结构教学设计_Python程序设计 循环结构说课稿
  8. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper
  9. Ubuntu 安装及基本配置(显示、镜像源、网络配置)
  10. Unix/Linux编程:多协议服务器(TCP/UDP)-----DAYTIME