//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++;
    }
}
示例#2
0
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);
}