C语言实现大数值金额大写转换的方法详解

关于大数值金额大写转换,在财务管理的应用方面没什么意义。一般来说,千亿级,万亿级的数值就够了。因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿。在企业层面数值金额转换设置到千亿、万亿就行了。大的集团级企业扩大到万万亿也就行了。做企业应用软件的可根据需要设置。至于再大的数值就是天文数字,有另外的表达方法。

本人喜欢探索各种算法。前些天写了15位数值的金额大写转换。今再尝试写一个更多位数值的换算大写转换。提供给需要的同道参考。

金额大写应用在很多方面,如支票、发票、各种单据,各种财务凭证,合同文本金额部分。财务方面制定了一套标准的表达法。财务上金额大写是没有负数的,财务上分借方和贷方,负数就是借方红字和贷方红字,也就是赤字。大写转换的算法要按财务管理的标准来设置。本文详细介绍算法的要点。

算法的要点

简单地讲就是字串转换处理。若输入是数值型则转为字串型。

将输入的金额分成整数部分和小数部分,整数部分分段为4位数的万级段,再按金额数值逐位转换成中文,拼成大写字串,然后输出。

对于不含零的情况,直接就转换好了。然而对于含零和连续多个零的情况就要消除多余的零。本文介绍的算法就是 ”截数值位消零法”,或称 ”截位消零法” 。

要处理的是整数部分,分四步:

一是  将整数部分分成整数的前几位字段和后面的4位万级数字段,

二是  按字段先换成2个字符的数字和单位的中文表达,

三是  按2个字符截取字段, 将含零的字段消去单位,

四是  处理多余的零,然后拼接整数和小数,输出大写。

转换的算法就一个函数:

Function   convert (){   //传入 snum $ 输出金额大写 put$
// M$="零元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟" ;
M$="零元拾佰仟万拾佰仟亿拾佰仟万拾佰仟万拾佰仟" ;
 string pn$[50] ;
 string dn[8] ;   //中国式以每万为段,4位一段
//对输入字串截取整数部分和小数部分,
//小数部分直接转换,整数部分按万级分段,
//先处理整数的前几位,后处理后续的4位万级数,
//最后拼接字串输出金额大写
   //snum="10020005600205" ;     //test

   g$= subString (snum, 0 ,1 ) ;
  //输入 "0.56"     format >  " .56"
    if(g$=="0") snum= subString (snum,1, 3)  ;
         nlen=len(snum) ;
         n=nlen ;
    for (i=0; i<nlen ; i++){
         g$= subString (snum, i,1 ) ;
         if(g$==".") n= i ;    }
    if (nlen-n>2) sn$=subString (snum,n+1,2) ;
    if (nlen-n==2) sn$=subString (snum,n+1,1)+"0" ;
    if (nlen-n==0) sn$="00" ;    //无小数
    fn$=subString (snum,0,n) ;    //截取整数部分
         print "输入金额 snum = ", snum ;
        // print "整数部分 fn = ", fn$ ;       //test
        // print "小数角分 sn = ", sn$ ;

 //开始转换,先处理整数 fn$ ******
       chb$=""  ;   chs$=""  ;    chsd$=""  ;
//角分小数部分 ******
      d1$=subString(sn$,0,1) ;
      d2$=subString(sn$,1,1) ;
        // print d1$ +"   "+d2$ ;     //test
   if (d1$=="0" ){
      c$="零" ; }else{
       a$=d1$ ;
       snToD ();
       c$=c$+"角" ;      }
       d$ =c$ ;     

  if (d2$=="0" ){
       c$="整" ; }else{
       a$=d2$ ;
       snToD ();
       c$=c$+"分" ;      }
       d$ =d$+c$ ;
       chs$=d$  ;     //小数chs$已转换
       // print "chs$ = "+chs$ ;   //test
  if (d1$=="0"&&d2$=="0" ){   chs$="整"  ;   }

 //开始转换,处理整数 fn$ ******
 //4位段整数转换
        nlen=len (fn$) ;    //字串长度
        n=nlen/4 ;            //整数后4字数段位数
        k=nlen-nlen/4*4 ;     //mod 整数前几位
            // print "Input fn$ = " + fn$ ;   //test
            // print "长串前面几位  k = " , k ;
            // print "长串后 4 字段 n = " , n ;
       d1$=subString (fn$, 0, k) ;
       d2$=subString (fn$, k, nlen) ;
            // print "d1$ = " + d1$ ;    //test
            // print "d2$ = " + d2$ ;
   //整数前几位转换
   for (i=0; i<k ; i++){   //
         a$= subString (d1$, i, 1 ) ;
         snToD () ;      //数字转大写 得c$
          b$=subString (M$, k - i+n*4,1) ;
          p$=subString (N$, n*4+i, 1) ;
          chsd$=chsd$+c$+b$ ;    }    //整数前几位
         // print "chsd$ = " + chsd$  ;   //test
//**** 整数前几位完成 chsd$
           p$="" ;
     for (i=0; i<n ; i++){   //整数后4数段位截串
           dn[i]= subString (d2$, i*4 , 4 ) ;
           p$=p$+ dn[i] +"" ;        }
           // print "p$ = "+p$ ;       //test

int du ;    // 4 位数段
        for (du=0; du<n ; du++){  //按整数4数段位转换
          p$="" ;
      for (i=0; i<4 ; i++){   //
         a$= subString (dn[du], i, 1 ) ;
         snToD () ;      //数字转大写 得c$
         b$=subString (M$, n*4-du*4 - i ,1) ;   //单位
         p$=p$+c$+b$ ;
         pn$[i]=c$+b$ ;     }    //整数后4字数段
          chb$=chb$+p$ ;       }    //du
     chb$=chsd$+chb$ ;
     //   print "chb$ = "+chb$ ;   //含零整数完成test

  //***************
   p$=" " ;
      nlen=len (chb$)/2 ;   //按中文二字组字串
      // for (i=0; i<30 ; i++){  pn$[i]=" " ;  }
   for (i=0; i<nlen ; i++){
          pn$[i]=subString(chb$, i*2, 2) ;   }
  //按位数转换成大写 format 消单位 **********
           p1$="" ;    p2$="" ;
           p$="" ;
    for (k=0; k<nlen ; k++){
           p1$=pn$[k] ;
        if (p1$=="零仟") { pn$[k]="零" ;    }
        if (p1$=="零佰") { pn$[k]="零" ;    }
        if (p1$=="零拾") { pn$[k]="零" ;    }
        if (p1$=="零元") { pn$[k]="元" ;    }
        if (p1$=="零万") { pn$[k]="万" ;    }
        if (p1$=="零亿") { pn$[k]="亿" ;    }
                 }  //format

          p$="" ;
   for (m=0; m<nlen ; m++){  //重组整数部分>去零
          p$=p$+pn$[m] ;    }
         // print p$ ;    //test
          nlen= len (p$) ;
  for (i=0; i<nlen ; i++){    //renew p$
          pn$[i]=subString(p$, i, 1) ;   }

  for (m=0; m<nlen ; m++){   //去多余 ”零”
            p1$=pn$[m] ;
       if (p1$=="零"&&pn$[m+1]=="零" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="元" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="万" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="亿" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="兆" ) {  pn$[m]="" ;  }
             }
      //   print p1$ ;    //test

    chb$=" " ;
    for (i=0; i<nlen ; i++){   //去零后重组整数部分
            chb$=chb$+pn$[i] ;      }
//特殊情况100000902  大写: 壹亿万零玖佰零贰元整
//测试时碰到此例 ”壹亿万零... ”  要消 "万" ****
//用京兆需要下列代码,用万亿、万万亿不需要
         nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”  ”亿”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="亿"&&b$=="万") {
           a$=subString (chb$, 1, i) ;
           b$=subString (chb$, i+2, nlen-i ) ;
           chb$= a$+b$ ;   }
      if (a$=="兆"&&b$=="亿") {
           a$=subString (chb$, 1, i) ;
           b$=subString (chb$, i+2, nlen-i ) ;
           chb$=chb$+a$+b$ ;   }   }

       nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="兆"&&b$=="万") {
           a$=subString (chb$, 1, i) ;
           b$=subString (chb$, i+2, nlen-i ) ;
           chb$=chb$+a$+b$ ;   }     } 

    chb$=chb$+chs$ ;     //整数小数拼接,完成转换
      if (snum=="."||snum==".0"||snum==".00"||snum=="0."||snum==" ") {
            chb$= " 零元整" ;      }
//输出结果 ******
       print " 大写输出:" ;
           put$=chb$ ;
       print  put$ ;        //转换完成输出
       print "...................................." ;

}//convert ()

结果图

完整代码

 //以下是完整的设计测试源码:
// ****  财务金额大写显示  **************
// 本代码是用简单的 C 语言写的,用 MySpringC
//  v2.7 编译调试通过。可以 VB6, C++, Java 改写。
// 编译人:张纯叔(micelu@126.com )
//*******************************************
 string sBarDes[10];
 int nBarId[10];
 string snum, put$ ;    //传入金额,输出大写
 int n, i, j, k, m ;
 string N$ , M$, D$ ;   //预设置大写字符
 string a$, c$;     //转换 传入a$ 输出c$
 string d$, d1$, d2$ ;    //计算小数角分
 string fn$, sn$ ;    //整数字串,小数字串
 string chs$, chb$, chsd$ ; //小写,大写,整数首段
 int nlen ;             //Len 字数
 string b$, g$, p$, p1$, p2$ ;    //计算

main(){
setDisplay (0);
   sBarDes[0]="输入金额";
   nBarId[0]=100;
   sBarDes[1]=" 测  试 ";
   nBarId[1]=101;
   sBarDes[2]=" 示  例 ";
   nBarId[2]=102;
   sBarDes[3]="  ";
   nBarId[3]=103;
   sBarDes[4]="退出程序 ";
   nBarId[4]=104;
   setToolBarHeight(10);
   setButtonTextSize(15);
  setToolBarBackgroundColor(255,220,220,220);
   setButtonColor(255,240,240,240);
   setButtonTextColor(255,0,0,200);
   setToolBar(100,myToolBarProc,sBarDes,nBarId,6);
    setTitle("金额大写转换");
 while (){}
}//main ()

 convert (){   //传入 snum $ 输出金额大写 put$
// M$="零元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟" ;
M$="零元拾佰仟万拾佰仟亿拾佰仟万拾佰仟万拾佰仟" ;
 string pn$[50] ;
 string dn[8] ;   //中国式以每万为段,4位一段
//对输入字串截取整数部分和小数部分,
//小数部分直接转换,整数部分按万级分段,
//先处理整数的前几位,后处理后续的4位万级数,
//最后拼接字串输出金额大写
   //snum="10020005600205" ;     //test

   g$= subString (snum, 0 ,1 ) ;
  //输入 "0.56"     format >  " .56"
    if(g$=="0") snum= subString (snum,1, 3)  ;
         nlen=len(snum) ;
         n=nlen ;
    for (i=0; i<nlen ; i++){
         g$= subString (snum, i,1 ) ;
         if(g$==".") n= i ;    }
    if (nlen-n>2) sn$=subString (snum,n+1,2) ;
    if (nlen-n==2) sn$=subString (snum,n+1,1)+"0" ;
    if (nlen-n==0) sn$="00" ;    //无小数
    fn$=subString (snum,0,n) ;    //截取整数部分
         print "输入金额 snum = ", snum ;
        // print "整数部分 fn = ", fn$ ;       //test
        // print "小数角分 sn = ", sn$ ;

 //开始转换,先处理整数 fn$ ******
       chb$=""  ;   chs$=""  ;    chsd$=""  ;
//角分小数部分 ******
      d1$=subString(sn$,0,1) ;
      d2$=subString(sn$,1,1) ;
        // print d1$ +"   "+d2$ ;     //test
   if (d1$=="0" ){
      c$="零" ; }else{
       a$=d1$ ;
       snToD ();
       c$=c$+"角" ;      }
       d$ =c$ ;     

  if (d2$=="0" ){
       c$="整" ; }else{
       a$=d2$ ;
       snToD ();
       c$=c$+"分" ;      }
       d$ =d$+c$ ;
       chs$=d$  ;     //小数chs$已转换
       // print "chs$ = "+chs$ ;   //test
  if (d1$=="0"&&d2$=="0" ){   chs$="整"  ;   }

 //开始转换,处理整数 fn$ ******
 //4位段整数转换
        nlen=len (fn$) ;    //字串长度
        n=nlen/4 ;            //整数后4字数段位数
        k=nlen-nlen/4*4 ;     //mod 整数前几位
            // print "Input fn$ = " + fn$ ;   //test
            // print "长串前面几位  k = " , k ;
            // print "长串后 4 字段 n = " , n ;
       d1$=subString (fn$, 0, k) ;
       d2$=subString (fn$, k, nlen) ;
            // print "d1$ = " + d1$ ;    //test
            // print "d2$ = " + d2$ ;
   //整数前几位转换
   for (i=0; i<k ; i++){   //
         a$= subString (d1$, i, 1 ) ;
         snToD () ;      //数字转大写 得c$
          b$=subString (M$, k - i+n*4,1) ;
          p$=subString (N$, n*4+i, 1) ;
          chsd$=chsd$+c$+b$ ;    }    //整数前几位
         // print "chsd$ = " + chsd$  ;   //test
//**** 整数前几位完成 chsd$
           p$="" ;
     for (i=0; i<n ; i++){   //整数后4数段位截串
           dn[i]= subString (d2$, i*4 , 4 ) ;
           p$=p$+ dn[i] +"" ;        }
           // print "p$ = "+p$ ;       //test

int du ;    // 4 位数段
        for (du=0; du<n ; du++){  //按整数4数段位转换
          p$="" ;
      for (i=0; i<4 ; i++){   //
         a$= subString (dn[du], i, 1 ) ;
         snToD () ;      //数字转大写 得c$
         b$=subString (M$, n*4-du*4 - i ,1) ;   //单位
         p$=p$+c$+b$ ;
         pn$[i]=c$+b$ ;     }    //整数后4字数段
          chb$=chb$+p$ ;       }    //du
     chb$=chsd$+chb$ ;
     //   print "chb$ = "+chb$ ;   //含零整数完成test

  //***************
   p$=" " ;
      nlen=len (chb$)/2 ;   //按中文二字组字串
      // for (i=0; i<30 ; i++){  pn$[i]=" " ;  }
   for (i=0; i<nlen ; i++){
          pn$[i]=subString(chb$, i*2, 2) ;   }
  //按位数转换成大写 format 消单位 **********
           p1$="" ;    p2$="" ;
           p$="" ;
    for (k=0; k<nlen ; k++){
           p1$=pn$[k] ;
        if (p1$=="零仟") { pn$[k]="零" ;    }
        if (p1$=="零佰") { pn$[k]="零" ;    }
        if (p1$=="零拾") { pn$[k]="零" ;    }
        if (p1$=="零元") { pn$[k]="元" ;    }
        if (p1$=="零万") { pn$[k]="万" ;    }
        if (p1$=="零亿") { pn$[k]="亿" ;    }
                 }  //format

          p$="" ;
   for (m=0; m<nlen ; m++){  //重组整数部分>去零
          p$=p$+pn$[m] ;    }
         // print p$ ;    //test
          nlen= len (p$) ;
  for (i=0; i<nlen ; i++){    //renew p$
          pn$[i]=subString(p$, i, 1) ;   }

  for (m=0; m<nlen ; m++){   //去多余 ”零”
            p1$=pn$[m] ;
       if (p1$=="零"&&pn$[m+1]=="零" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="元" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="万" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="亿" ) {  pn$[m]="" ;  }
       if (p1$=="零"&&pn$[m+1]=="兆" ) {  pn$[m]="" ;  }
             }
      //   print p1$ ;    //test

    chb$=" " ;
    for (i=0; i<nlen ; i++){   //去零后重组整数部分
            chb$=chb$+pn$[i] ;      }
//特殊情况100000902  大写: 壹亿万零玖佰零贰元整
//测试时碰到此例 ”壹亿万零... ”  要消 "万" ****
//用京兆需要下列代码,用万亿、万万亿不需要
         nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”  ”亿”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="亿"&&b$=="万") {
           a$=subString (chb$, 1, i) ;
           b$=subString (chb$, i+2, nlen-i ) ;
           chb$= a$+b$ ;   }
      if (a$=="兆"&&b$=="亿") {
           a$=subString (chb$, 1, i) ;
           b$=subString (chb$, i+2, nlen-i ) ;
           chb$=chb$+a$+b$ ;   }   }

       nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="兆"&&b$=="万") {
           a$=subString (chb$, 1, i) ;
           b$=subString (chb$, i+2, nlen-i ) ;
           chb$=chb$+a$+b$ ;   }     } 

    chb$=chb$+chs$ ;     //整数小数拼接,完成转换
      if (snum=="."||snum==".0"||snum==".00"||snum=="0."||snum==" ") {
            chb$= " 零元整" ;      }
//输出结果 ******
       print " 大写输出:" ;
           put$=chb$ ;
       print  put$ ;        //转换完成输出
       print "...................................." ;

}//convert ()

结果图

test (){  //数值含零空位算法测试
       clearOutput ();
   print "特殊数值检测检验:" ;
   snum="20000100300000000" ;
        convert () ;
   snum="100000902" ;
        convert () ;
   snum="20005600205" ;
        convert () ;
   snum="3060002065" ;
        convert () ;
  snum="10508005.75" ;
        convert () ;
  snum="50700650.5" ;
        convert () ;
  snum="1802065.06" ;
        convert () ;
}//test ()

结果图

sample (){
   clearOutput ();
   print "输出示例:" ;
   snum="30600702" ;
       convert () ;
   snum="1500903.08" ;
        convert () ;
   snum="1020697.00" ;
        convert () ;
   snum="159533.65" ;
        convert () ;
   snum="282581697.50" ;
        convert () ;
   snum="520967.56248" ;
        convert () ;
  snum="2801697.00" ;
        convert () ;
 }//sample() 

snToD (){   //传入a$  返回c$
  N$="零壹贰叁肆伍陆柒捌玖" ;
        if (a$=="0") c$=subString (N$,0,1) ;
        if (a$=="1") c$=subString (N$,1,1) ;
        if (a$=="2") c$=subString (N$,2,1) ;
        if (a$=="3") c$=subString (N$,3,1) ;
        if (a$=="4") c$=subString (N$,4,1) ;
        if (a$=="5") c$=subString (N$,5,1) ;
        if (a$=="6") c$=subString (N$,6,1) ;
        if (a$=="7") c$=subString (N$,7,1) ;
        if (a$=="8") c$=subString (N$,8,1) ;
        if (a$=="9") c$=subString (N$,9,1) ;
}//snToD ()

input (){//输入
string m;
    snum=stringInput (" 输入金额转大写 ","   输入金额小写   例: 3572689.36  \n        ( 输出金额大写  )\n    输入 [ 空 ]  退出 " ) ;
          clearOutput ();
         print "Input  金额 = ",snum ;
    if (snum=="") {  snum=".00"  ;
         print "输入为空,请重新输入。 "  ;     }
     convert () ;
}//input ()

myToolBarProc(int nBtn,int nContext) {
      if(nBtn==100){//输入金额
            input ();           }
      if(nBtn==101){  //test 测试
             test () ;           }
       if(nBtn==102){//示例
            sample ();           }
      if(nBtn==103){//算法测试
             // convert () ;
                    }
      if(nBtn==104){//退出程序
          clearOutput();
          exit (0);            }
}//myToolbar ()

//**** End ****

到此这篇关于C语言实现大数值金额大写转换的方法详解的文章就介绍到这了,更多相关C语言数值金额大写转换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言中的switch语句基本用法

    switch语句: 实际生活中,需要做出很多选择,大家都知道做选择可以使用if语句,但是如果选择太多,if语句使用起来就会很繁琐,这个时候就需要一个能将代码简化的语句,也就是我们今天的主角switch语句. switch语句是一个多分支选择语句,并且可以支持嵌套. switch语句的基本格式 switch(表达式) { case 常量1:语句1 case 常量2:语句2 default:语句n break; } switch语句通过将表达式的值与常量值进行比对,如果相等则执行后面的语句,如果不相

  • 使用C语言实现珠玑妙算Mastermind小游戏

    引言 最近玩到过一款十分好玩的益智类桌游——珠玑妙算-Mastermind,这款游戏也出现在热片<拆弹专家2>里,该款游戏就是有四个槽位,而要将6种颜色依次放入槽位之中,然后由出题人反馈正确位置及错误位置正确颜色数,再通过逻辑推理,推出正确的颜色及位置.因为这种游戏为多人游戏,一个人不能自己出题.判断及推理,我在手机上搜找相关游戏却没有找到相应游戏,于是,萌生自主编写的想法. ( Mastermind(珠玑妙算)是一种可供两名玩家使用的密码破译棋盘游戏.在1970年由Mordecai Meir

  • 基于C语言实现计算生辰八字五行的示例详解

    本文介绍生辰八字和八字五行的一种算法.站内有人在查询生辰八字的算法,此题本人也感兴趣.故以此文以续貂尾. 生辰八字计算要点是节气日,年柱以立春起,月柱以是月节气日起,故先要计算月首的节气日.本节气算法的节气时刻精度差些,但确定节气日是可以的.程序启动时先计算干支表和对应的五行表.具体的计算方法参阅程序的注释.算法很简单,一看就明白.要注意的是,八字的时柱先输出的是起时,生日时辰十二个时辰对应下面的起时表计算.程序列示文本打印输出和图片显示输出二种方法供参考. 本文主要介绍生辰八字的算法,没有计算

  • C语言学习之柔性数组详解

    目录 一.前言 二.柔性数组的用法 三.柔性数组的内存分布 四.柔性数组的优势 五.总结 一.前言 仔细观察下面的代码,有没有看出哪里不对劲? struct S { int i; double d; char c; int arr[]; }; 还有另外一种写法: struct S { int i; double d; char c; int arr[0]; }; 你应该一眼就看到了,结构体的最后一个成员数组的写法是int arr[];或者是int arr[0],这两种写法是等价的,意思是这个数组

  • 一文带你了解C语言中的动态内存管理函数

    目录 1.什么是动态内存管理 2.为什么要有动态内存管理 3.如何进行动态内存管理 3.1 malloc 3.2 free 3.3 calloc 3.4 realloc 总结 1.什么是动态内存管理 平时我们写代码,一种非常常见的写法是: int a = 0; // 创建一个变量 int arr[10] = {0}; // 创建一个数组 当你创建变量a的时候,其实是向内存中申请了4个字节的空间来存放一个整数.而当你创建数组arr的时候,是向内存中申请了40个字节的空间来存放10个整数.当你这么写

  • C语言实现手写JSON解析的方法详解

    目录 什么是JSON JSON支持的数据类型 JSON语法规则 JSON的解析 JSON基本语法 编写解析器 头文件 实现文件 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用来传输属性值或者序列性的值组成的数据对象. JSON是JavaScript的一个子集. 具有良好的可读性和便于快速编写的特性. JSON是独立于语言的文本格式,并且采用了类似C语言家族的一些习惯. JSON数据格式与语言无关,是目前网络中主流的数据传输格式之一,

  • 对python3 一组数值的归一化处理方法详解

    1.什么是归一化: 归一化就是把一组数(大于1)化为以1为最大值,0为最小值,其余数据按百分比计算的方法.如:1,2,3.,那归一化后就是:0,0.5,1 2.归一化步骤: 如:2,4,6 (1)找出一组数里的最小值和最大值,然后就算最大值和最小值的差值 min = 2: max = 6: r = max - min = 4 (2)数组中每个数都减去最小值 2,4,6 变成 0,2,4 (3)再除去差值r 0,2,4 变成 0,0.5,1 就得出归一化后的数组了 3.用python 把一个矩阵中

  • Go语言基础语法之结构体及方法详解

    结构体类型可以用来保存不同类型的数据,也可以通过方法的形式来声明它的行为.本文将介绍go语言中的结构体和方法,以及"继承"的实现方法. 结构体类型 结构体类型(struct)在go语言中具有重要地位,它是实现go语言面向对象编程的重要工具.go语言中没有类的概念,可以使用结构体实现类似的功能,传统的OOP(Object-Oriented Programming)思想中的继承在go中可以通过嵌入字段的方式实现. 结构体的声明与定义: // 使用关键字 type 和 struct 定义名字

  • C语言实现字符串字符反向排列的方法详解

    目录 前言 非递归方法 1.循环实现 2.函数实现 递归方法 1.递归方法 2.递归方法 小结 前言 重点的话说在前头,注意不是逆序打印 今天写题,碰到一个很好的题,在这里来个大家做个分享,我会用多种方法来解决 题目具体内容如下: 编写一个函数(递归实现) 实现:将参数字符串中的字符反向排列,不是逆序打印. 要求:不能使用C函数库中的字符串操作函数 但是这里我不会仅仅局限于题目的要求 非递归方法 1.循环实现 1.1循环实现(sizeof) #include <stdio.h> int mai

  • Python实现常见数据格式转换的方法详解

    目录 xml_to_csv csv_to_tfrecord xml_to_csv 代码如下: import os import glob import pandas as pd import xml.etree.ElementTree as ET def xml_to_csv(path): xml_list = [] for xml_file in glob.glob(path + '/*.xml'): tree = ET.parse(xml_file) root = tree.getroot(

  • 在go语言中安装与使用protobuf的方法详解

    简介 本文主要给大家介绍了关于go语言安装使用protobuf的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. protobuf是Google开发出来的一个语言无关.平台无关的数据序列化工具,在rpc或tcp通信等很多场景都可以使用.通俗来讲,如果客户端和服务端使用的是不同的语言,那么在服务端定义一个数据结构,通过protobuf转化为字节流,再传送到客户端解码,就可以得到对应的数据结构.这就是protobuf神奇的地方.并且,它的通信效率极高,"一条消息数据,用pr

  • 解决无法在unicode和非unicode字符串数据类型之间转换的方法详解

    今天用excel导入数据又遇到了-- 错误 0xc02020f6:数据流任务:列"column"无法在 unicode和非unicode字符串数据类型之间转换. 原因:仔细看了一下,发现有些字段是varchar的,而excel中估计都是nvarchar类型. 方法: 1.修改表字段类型为nvarchar. 2.导入一个临时表,再insert*** into *** select ***. 3.直接通过应用程序读入记录集,然后再一条一条insert into --.

  • Go语言利用time.After实现超时控制的方法详解

    前言 在开始之前,对time.After使用有疑问的朋友们可以看看这篇文章:https://www.jb51.net/article/146063.htm 我们在Golang网络编程中,经常要遇到设置超时的需求,本文就来给大家详细介绍了Go语言利用time.After实现超时控制的相关内容,下面话不多说了,来一起看看详细的介绍吧. 场景: 假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅.简洁的实现呢? 我们可以采用select+time.After的方式,十分简单适用的实现. 首先

  • 解决MongoDB占用内存过大频繁死机的方法详解

    从MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者中的较大者: 50%(RAM-1 GB),或 256 MB 例如,在总共有4GB RAM的系统上,WiredTiger缓存将使用1.5GB RAM(). 相反,总内存为1.25 GB的系统将为WiredTiger缓存分配256 MB,因为这是总RAM的一半以上减去1 GB(). // 4GB 0.5 * (4 GB - 1 GB) = 1.5 GB // 1.25GB 0.5 * (1.25 GB - 1 GB) =

  • C语言中栈的两种实现方法详解

    目录 一.顺序栈 二.链式栈 总结 一.顺序栈 #include<stdio.h> #include<stdlib.h> #define maxsize 64 //定义栈 typedef struct { int data[maxsize]; int top; }sqstack,*sqslink; //设置栈空 void Clearstack(sqslink s) { s->top=-1; } //判断栈空 int Emptystack(sqslink s) { if (s-

随机推荐