//num == 0需要特殊处理,直接返回"零" void NumberToChinese(unsigned int num, std::string& chnStr) { chnStr.clear(); int unitPos = 0; std::string strIns; bool needZero = false; if(num == 0) { chnStr = chnNumChar[0]; return; } while(num > 0) { unsigned int section = num % 10000; if(needZero) { chnStr.insert(0, chnNumChar[0]); } SectionToChinese(section, strIns); /*是否需要节权位?*/ strIns += (section != 0) ? chnUnitSection[unitPos] : chnUnitSection[0]; chnStr.insert(0, strIns); /*千位是0?需要在下一个section补零*/ needZero = (section < 1000) && (section > 0); num = num / 10000; unitPos++; } }
void MainWindow::mysetText(QString str) { int unitPos = 0; QString chnStr = ""; bool needZero = false; unsigned int num = str.toUInt(); while(num>0) { unsigned int sec = num % 10000; if(needZero) chnStr = chnNumChar[0] + chnStr; chnStr = (sec !=0 ) ? chnUnitSection[unitPos] + chnStr : chnUnitSection[0] + chnStr; chnStr = SectionToChinese(sec,chnStr); needZero = (sec < 1000) && (sec > 0); num /= 10000; ++unitPos; } ui->lineEdit_2->setText(chnStr); }