快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

小写金额转换为大写金额(C实现)(2)


            || ( !feeInfo.decimal[ 0 ] && !feeInfo.decimal[ 1 ] ) )   //小数部都为0
            decZeroTag = 1;
        else
            decZeroTag = 0;

        //printf( "int size: %d    decimal size: %d\n", feeInfo.sizeInt, feeInfo.sizeDecimal );

        strcpy( pDest, UnitChar[ 21 ] );                  //初始化目标字符串-人民币

        if ( feeInfo.minus ) strcat( pDest, UnitChar[ 20 ] );    //负号

        //处理整数部分
        size = feeInfo.sizeInt;
        for( i = 0; i < size; ++i )
        {
            j = size - i - 1 & 0x3;                              //j = 0时为段尾
            if ( feeInfo.integer[ i ] == 0 && j )                //处理非段尾0
            {
                zeroTag = 1;
            }
            else if ( feeInfo.integer[ i ] == 0 && !j )          //处理段尾0
            {
                if ( feeInfo.sizeInt == 1 && decZeroTag )        //特殊处理个位0
                    strcat( pDest, NumberChar[ feeInfo.integer[ i ] ] );
                if ( feeInfo.sizeInt != 1 || decZeroTag )
                    strcat( pDest, UnitChar[ size - i ] );
                zeroTag = 0;
            }
            else                                                 //处理非0
            {
                if ( zeroTag )
                {
                    strcat( pDest, NumberChar[ 0 ] );
                    zeroTag = 0;
                }
                strcat( pDest, NumberChar[ feeInfo.integer[ i ] ] );
                strcat( pDest, UnitChar[ size - i ] );
                if ( !j ) zeroTag = 0;                      //如果是段尾,设为非标志
            }
        }

        if ( decZeroTag )
        {
            strcat( pDest, UnitChar[ 0 ] );//没有小数部,打印"整"字符
        }
        else
        {
            //十分位
            if ( feeInfo.decimal[ 0 ] )
            {
                strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );
                strcat( pDest, UnitChar[ 18 ] );
            }
            else if ( feeInfo.sizeInt != 1 || feeInfo.integer[ 0 ] )
            {
                strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );
            }

            //百分位不为0时
            if ( feeInfo.decimal[ 1 ] )
            {
                strcat( pDest, NumberChar[ feeInfo.decimal[ 1 ] ] );
                strcat( pDest, UnitChar[ 19 ] );
            }
        }
        return dest;
    }

      代码中有些地方没有注释清楚,要是有不明白的可以E-Mail我[email protected]

    参考: 小写转大写金额在C++中的实现

    附:


 

    正确填写票据和结算凭证的基本规定


    银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。

    一、 中文大写金额数字应用正楷或行书填写,如壹(壹)、贰(贰)、叁、肆(肆)、伍(伍)、陆(陆)、柒、捌、玖、拾、伯、仟、万(万)、亿、元、角、分、零、整(正)等字样。不得用一、二(两)、三、四、五、六、七、八、九、十、念、毛、另(或0)填写,不得自造简化字。如果金额数字书写中使用繁体字,也应受理。

    二、 中文大写金额数字到"元"为止的,在"元"之后,应写"整"(或"正")字,在"角"之后可以不写"整"(或"正")字。数字有"分"的,"分"后面不写"整"(或"正")字。

    三、 中文大写金额数字前应标明"人民币"字样,大写金额数字应紧接"人民币"字样填写,不得留有空白。大写金额数字前未印"人民币"字样的,应加填"人民币"三字。在票据和结算凭证大写金额栏内不得预印固定的"仟、佰、拾、万、仟、佰、拾、元、角、分字样。

    四、阿拉伯小写金额数字中有"0"时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例如下:

    (一)阿拉伯数字中间有"0"时,中文大写金额要写"零"字。如¥1,409.50,应写成人民币壹仟肆佰零玖元伍角。
    (二)阿拉伯数字中间连续有几个"0"时,中文大写金额中间可以只写一个"零"字。如¥6,007.14,应写成人民币陆仟零柒元壹角肆分。
    (三)阿拉伯金额数字万位或元位是"0",或者数字中间连续有几个"0",万位、元位也是"0",但千位、角位不是"0"时,中文大写金额中可以只写一个零字,也可以不写"零"字。如¥1,680.32,应写成人民币壹仟陆佰捌拾元零叁角贰分,或者写成人民币壹仟陆佰捌拾元叁角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万零柒仟元伍角叁分。
    (四)阿拉伯金额数字角位是"0",而分位不是"0"时,中文大写金额"元"后面应写"零"字。如¥16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾伍元零肆分。

    五、阿拉伯小写金额数字前面,均应填写人民币符号"¥"(或草写)。阿拉伯小写金额数字要认真填写,不得连写分辨不清。

    六、票据的出票日期必须使用中文大写。为防止变造票据的出票日期,在填写月、日时,月为壹、贰和壹拾的,日为壹至玖和壹拾、贰拾和叁拾的,应在其前加"零"; 日为拾壹至拾玖的,应在其前加"壹"。如1月15日,应写成零壹月壹拾伍日。再如10月20日,应写成零壹拾月零贰拾日。

    七、票据出票日期使用小写填写的,银行不予受理。大写日期未按要求规范填写的,银行可予受理,但由此造成损失的,由出票人自行承担。

    引自中国人民银行会计司编写的最新《企业、银行正确办理支付结算指南》的第114页-第115页

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论