感觉数字大小写转换的代码应该是没有问题的,但是死活折腾不出输出的部分。求助诸位大佬帮忙看下怎么改啊?
以下是代码:
void MainWindow::on_pushButton_clicked()
{
QString Left_of_Point=number_Transfer_BigChinese(&number);
QString number;
QString numberSign;
//QString qstr=QString::fromStdString(Left_of_Point);
//QStringList numerical_unit = {"","拾","佰","仟","万","拾", "佰", "仟", "亿", "拾", "佰", "仟"};
//单位表
//QStringList numerical_value = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};//数字表
//ui->textBrowser->clear();
//ui->textBrowser->setText(qstr);
//QString str1=ui->lineEdit->text();
//QString numerical_value=str1.toStdString();
//double number=atof(numerical_value.c_str());
//QString numerical_unit=number_Transfer_BigChinese(number);
//QString qstr=QString::fromStdString(numerical_unit);
ui->textBrowser->setText();
}
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.toLatin1()-'0' )==0) //从个位开始,向高位走 counter_0++;
else
break;
}
if(length==1 && counter_0==1) //0.x
counter_0=0; //不进行过滤
//1400 0.2
for(int i=0,flag=1;i<length-counter_0;i++)
{ //5 8 1 2 3 //伍 拾 捌 壹佰 贰拾 叁
if((number.toLatin1()-'0')==0)
{ if((flag!=0 && (length-1-i)%4 != 0) || length ==1) //flag!=0 表示前一个数值 不为0
Left_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.toLatin1()-'0']; //'5'-'0'==5
Left_of_Point+=numerical_unit[length-1-i];//添加数值单位
}
}
//QString Right_of_Point;//小数点右侧,小数部分(保留两位) xxxx.yy
int 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 "异常情况";}