【第一篇】Qt学习与使用---将数字转换成中文大写的形式
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学习与使用---将数字转换成中文大写的形式相关推荐
- C语言-如何将用户输入的金额数字转换成中文大写?
实战: 如何将用户输入的金额数字转换成中文大写? #include <stdio.h>int main() {// 输入金额转换成大写int money; // 输入数字int money ...
- js将数字转换成中文大写
//完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五.const toChinesNum = ( ...
- JavaScript:将输入的一串数字转换成中文大写,最高可写12位(千亿)
将输入的一串数字转换成中文大写,最高可写12位(千亿) 例:输入:10000,输出:壹万 输入:10010,输出:壹万零壹拾 源码: function toChineseBig(num) {// 将接 ...
- 将数字转换成中文大写的算法
//名称:ConvertSignCap //参数:number //返回:CapNumber //描述:将传入的单个数字转换成中文大写形式 //创建人:刘权 2004-11-16 ...
- python数字转换成中文大写
python数字转换成中文大写 代码 #-*- coding:utf-8 -*- count_map = {1:1, 2:10, 3:100, 4:1000, 5:10000} #用来统计传入数值的级 ...
- python 把数字转换成中文大写
def conversionString(intnumber):'''把数字转换成中文大写,例如:1->一 ,25->二十五,49->四十九Parameters----------i ...
- 货币数字转换成中文大写的函数
这个函数与以前其他网友提供的结构大不相同, 是一个从高位到低位的算法, 更加符合语言习惯. //---------------------------------------------------- ...
- python数字转换成中文大写_python初学者笔记(2):阿拉伯数字转换成中文大写
题:输入一个数字,转换成中文大写的写法 可运行的程序(Python 2.7.9): 1 #-*- coding: utf-8 -*- #在python2的py文件里面写中文,必须要添加一行声明文件编码 ...
- Java实现将数字转换成中文大写
/** *程序功能:支持将仟亿数字转换成中文数字表示,如(110.12 转换成壹佰壹拾元壹角贰分) *算法思路:将数字,分成整数部分和小数部分(小数部分四舍五入到两位),分别进行转换,然后将转换后的结 ...
- C#数字转换成中文大写
/// <summary> /// 单个数字转为大写 /// </summary> /// <param name="c">小写阿拉伯数字 0- ...
最新文章
- 一张图看懂中科大、国科大、中科院、社科院、上科大之间的关系
- 管理心得之学术,交通,作息,心态
- JSONPATH使用方法
- 英特尔QSV技术在FFmpeg中的实现与使用
- PYTHON__关于Socket中的Select使用理解
- [linux命令技巧] mkdir -p
- php 栈实现历史记录后退,栈:如何实现浏览器的前进和后退功能
- ajax解析json中的对象数组对象,在JQuery中检索json数组后获取json对象Ajax
- 红帽Redhat网络功能虚拟化产品指南、规划和配置指南
- Nginx + php-fpm + PHP 5.4 + MySQL 5.5 + Zend
- 彻底解决Android GPS没法定位这一顽固问题
- JavaScript学习手册一
- 报修下单上门维修小程序开发制作
- 为什么 securely empty 那么慢?
- Mars XLog日志模块集成
- android打印 编辑并打印 word
- spring boot注解@PostConstruct
- 我花了两年,从不懂Python变成了AI工程师
- c语言集合运算有菜单,怎样用C语言实现集合运算
- 冠军之夜,《我是创始人》孙涛勇变身“最强大脑”