1.期望实现:

数字 ===> 中文大写

如:

123.0456                      ===>                                                   壹贰叁点零肆伍陆

12003045.678              ===>                     壹仟贰佰零万叁仟零肆拾伍点陆捌

32012003045.678        ===>    叁佰贰拾亿壹仟贰佰零万叁仟零肆拾伍点陆捌

2.基本思路:

2.1 将数字分成四部分 即: 符号+整数+“点”+小数

2.2 查表拼接---将每一位的数字对应到汉字,将汉字拼接上去。

整数部分有数值单位,小数部分不需要数值单位。

数字表

QStringList numerical_value  =   {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

单位表

(这个表成员的多少 决定你能装换的最大数值范围)(这里给出的可以让你最大转换 1万亿之下的所有数字(小于1万亿,大于负1万亿)

QStringList numerical_unit   =   {"","拾","佰","仟","万","拾", "佰", "仟", "亿", "拾", "佰", "仟"};

3.难点:

实现查表,再拼接,这样做很简单。但是这样做的结果就是如此:

32012003045.678        ===>    叁佰贰拾零亿壹仟贰佰零拾零万叁仟零佰肆拾伍点陆捌

猛地一看,你可能觉得没什么,但这样的写法是不符合我们中国人读数字的习惯的。

3.1当出现多个连0的情况的时候,需要我们根据情况省略和跳过拼接。

3.2在省略零的时候,要注意分段省略,按照中国人的习惯,4位为一段。我按照 “”,“万”,“亿”将整数部分分成三段(因为我的数字范围是1万亿以下)。

如果不分段,可能会导致,“万”和“亿”的丢失。

4.代码

const QString number_Transfer_BigChinese(const double &Fnumber)
{if(qAbs(Fnumber)<0.01)   //保留2位小数时,近似看作零的情况return "零";//判断正负号QString numberSign;//存储符号if(Fnumber<0)numberSign = "(负数)";//将数据的绝对值 转换成字符串,如-58 转成 “58.00”QString number = QString::number(qAbs(Fnumber),'f',2);//qAbs绝对值 ,保留两位小数QString Left_of_Point;//整数部分int length =number.length()-3;//整数部分的长度,(精确度为2,去除小数和小数点)if(length>12){//qDebug()<<"输入的数值超过范围!"return "输入的数值超过范围!";}QStringList numerical_unit   =   {"","拾","佰","仟","万","拾", "佰", "仟", "亿", "拾", "佰", "仟"};QStringList numerical_value  =   {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};//数数整数低位多少个连零int counter_0=0;for(int i =length-1;i>=0;i--){if((number[i].toLatin1()-'0' )==0) //从个位开始,向高位走counter_0++;elsebreak;}if(length==1 && counter_0==1) //0.xcounter_0=0; //不进行过滤//1400  0.2for(int i=0,flag=1;i<length-counter_0;i++){//5     8       1    2   3//伍 拾 捌       壹佰 贰拾 叁if((number[i].toLatin1()-'0')==0){if((flag!=0 && (length-1-i)%4 != 0) || length ==1) //flag!=0  表示前一个数值 不为0Left_of_Point+="零"; //后面不用添加 单位if((length-1-i)%4 == 0) //如果0处于分段处,后面需添加单位Left_of_Point+=numerical_unit[length-1-i];//添加数值单位flag =0; //标记}else{flag =1;Left_of_Point+=numerical_value[number[i].toLatin1()-'0']; //'5'-'0'==5Left_of_Point+=numerical_unit[length-1-i];//添加数值单位}}//QString Right_of_Point;//小数点右侧,小数部分(保留两位)  xxxx.yyint totalLength = number.length();if(number[totalLength-2]=='0'&&number[totalLength-1]=='0'){QString Bigcn=numberSign+Left_of_Point+"吨";return Bigcn;}else if(number[totalLength-2]!='0'&&number[totalLength-1]=='0'){QString Bigcn=numberSign+Left_of_Point+"点"+numerical_value[number[totalLength-2].toLatin1()-'0']+"吨";return Bigcn;}else{QString Bigcn=numberSign+Left_of_Point+"点"+numerical_value[number[totalLength-2].toLatin1()-'0']+numerical_value[number[totalLength-1].toLatin1()-'0']+"吨";return Bigcn;}return "异常情况";
}

5.欢迎大家留言交流(转载请标明出处噢!(*  ̄3)(ε ̄ *))

【第一篇】Qt学习与使用---将数字转换成中文大写的形式相关推荐

  1. C语言-如何将用户输入的金额数字转换成中文大写?

    实战: 如何将用户输入的金额数字转换成中文大写? #include <stdio.h>int main() {// 输入金额转换成大写int money; // 输入数字int money ...

  2. js将数字转换成中文大写

    //完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五.const toChinesNum = ( ...

  3. JavaScript:将输入的一串数字转换成中文大写,最高可写12位(千亿)

    将输入的一串数字转换成中文大写,最高可写12位(千亿) 例:输入:10000,输出:壹万 输入:10010,输出:壹万零壹拾 源码: function toChineseBig(num) {// 将接 ...

  4. 将数字转换成中文大写的算法

    //名称:ConvertSignCap   //参数:number   //返回:CapNumber   //描述:将传入的单个数字转换成中文大写形式   //创建人:刘权 2004-11-16    ...

  5. python数字转换成中文大写

    python数字转换成中文大写 代码 #-*- coding:utf-8 -*- count_map = {1:1, 2:10, 3:100, 4:1000, 5:10000} #用来统计传入数值的级 ...

  6. python 把数字转换成中文大写

    def conversionString(intnumber):'''把数字转换成中文大写,例如:1->一 ,25->二十五,49->四十九Parameters----------i ...

  7. 货币数字转换成中文大写的函数

    这个函数与以前其他网友提供的结构大不相同, 是一个从高位到低位的算法, 更加符合语言习惯. //---------------------------------------------------- ...

  8. python数字转换成中文大写_python初学者笔记(2):阿拉伯数字转换成中文大写

    题:输入一个数字,转换成中文大写的写法 可运行的程序(Python 2.7.9): 1 #-*- coding: utf-8 -*- #在python2的py文件里面写中文,必须要添加一行声明文件编码 ...

  9. Java实现将数字转换成中文大写

    /** *程序功能:支持将仟亿数字转换成中文数字表示,如(110.12 转换成壹佰壹拾元壹角贰分) *算法思路:将数字,分成整数部分和小数部分(小数部分四舍五入到两位),分别进行转换,然后将转换后的结 ...

  10. C#数字转换成中文大写

    /// <summary> /// 单个数字转为大写 /// </summary> /// <param name="c">小写阿拉伯数字 0- ...

最新文章

  1. 一张图看懂中科大、国科大、中科院、社科院、上科大之间的关系
  2. 管理心得之学术,交通,作息,心态
  3. JSONPATH使用方法
  4. 英特尔QSV技术在FFmpeg中的实现与使用
  5. PYTHON__关于Socket中的Select使用理解
  6. [linux命令技巧] mkdir -p
  7. php 栈实现历史记录后退,栈:如何实现浏览器的前进和后退功能
  8. ajax解析json中的对象数组对象,在JQuery中检索json数组后获取json对象Ajax
  9. 红帽Redhat网络功能虚拟化产品指南、规划和配置指南
  10. Nginx + php-fpm + PHP 5.4 + MySQL 5.5 + Zend
  11. 彻底解决Android GPS没法定位这一顽固问题
  12. JavaScript学习手册一
  13. 报修下单上门维修小程序开发制作
  14. 为什么 securely empty 那么慢?
  15. Mars XLog日志模块集成
  16. android打印 编辑并打印 word
  17. spring boot注解@PostConstruct
  18. 我花了两年,从不懂Python变成了AI工程师
  19. c语言集合运算有菜单,怎样用C语言实现集合运算
  20. 冠军之夜,《我是创始人》孙涛勇变身“最强大脑”

热门文章

  1. tkinter学习04
  2. 运营商线路细分_国内三大运营商宽带线路及分级介绍
  3. 用户注册的邮箱激活模块的设计与实现
  4. ios设备开发教程-利用app申请ios开发证书及描述文件
  5. C语言应用(2)——判断当前时间是否在一个时间段内(含跨天)
  6. matlab实现单极性,怎样用matlab画单极性非归零码传输码型示意图?请各位大虾赐教...
  7. 怎么把mov视频转换成mp4格式
  8. 腾讯下载的视频怎么转换成mp4格式
  9. 数学分析高等代数考研试题考研真题汇总目录2020-01-10更新
  10. 什么是bug(软件缺陷)