MsgBox,262144,进制转换测试,% "10—>2:" DigitalConv.ConvertBase(10, 2, "25") . "`n10—>16:" DigitalConv.ConvertBase(10, 16, "44") . "`n10—>8 :" DigitalConv.ConvertBase(10, 8, "44") . "`n16—>10:" DigitalConv.ConvertBase(16, 10, "4E") . "`n16—>8 :" DigitalConv.ConvertBase(16, 8, "4E") . "`n16—>2 :" DigitalConv.ConvertBase(16, 2, "4E") . "`n2 —>10:" DigitalConv.ConvertBase(2, 10, "1011") . "`n2 —>16:" DigitalConv.ConvertBase(2, 16, "1011") . "`n2 —>8 :" DigitalConv.ConvertBase(2, 8, "1011") . "`n8 —>16:" DigitalConv.ConvertBase(8, 16, "35") Loop { Random, Number, 0.0, 10000000000000.0 Number:=Format("{:.4f}",Number) MsgBox,262149,数字转换测试, % "Number:" Number . "`n数字大写:" DigitalConv.GetDigitalFormat(Number,True) . "`n数字小写:" DigitalConv.GetDigitalFormat(Number,False) . "`n金额转换:" DigitalConv.GetMoneyFormat(Number) IfMsgBox,Cancel Break } ; By 蜜獾哥 Class DigitalConv { static list:={DigitalTrad:{0:"零",1:"壹",2:"贰",3:"叁",4:"肆",5:"伍",6:"陆",7:"柒",8:"捌",9:"玖"} ,DigitalSimp:{0:"〇",1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九"} ,AmountUnits:["","万","亿","兆","京","垓"] ,UnitsTrad:["","萬","億","兆","京","垓"]} ;;大小写转换 GetDigitalFormat(Num,trad:=False){ Local String String:="" if Num~="[^0-9.]" Return "" if InStr(Num,"."){ len:=StrLen(Integer:=StrSplit(Num,".")[1]),decimal:=StrSplit(Num,".")[2] }Else len:=StrLen(Integer:=Num) DllCall("msvcrt.dll\_wcsrev", "Ptr", &Integer, "CDecl") Integer:=Trim(RegExReplace(Integer,"(\d{4})","$1,"),",") Loop,Parse,Integer,`, { if (A_LoopField<>"") { if Item:=this.FormatDigital(A_LoopField,trad?["拾","佰","仟"]:["十","百","千"],True,trad) String.= (trad?this.List.UnitsTrad[A_Index]:this.List.AmountUnits[A_Index]) Item } } DllCall("msvcrt.dll\_wcsrev", "Ptr", &String, "CDecl") ;;字符反转 String:=RegExReplace(RegExReplace(String,(trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0]) "{2,}",(trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0])),(trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0]) "(?=" (trad?this.List.UnitsTrad[2]:this.List.AmountUnits[2]) "|" (trad?this.List.UnitsTrad[3]:this.List.AmountUnits[3]) "|" (trad?this.List.UnitsTrad[4]:this.List.AmountUnits[4]) "|" (trad?this.List.UnitsTrad[5]:this.List.AmountUnits[5]) "|" (trad?this.List.UnitsTrad[6]:this.List.AmountUnits[6]) ")") String:=RegExReplace(String,(trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0]) "+$|^" (trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0])) if decimal { String.= trad?"點":"点" Loop,Parse,decimal String.= trad?this.List.DigitalTrad[A_LoopField]:this.List.DigitalSimp[A_LoopField] } Return RegExReplace(String,"^" . (trad?this.List.DigitalTrad[1]:this.List.DigitalSimp[1]) . (trad?"拾":"十"),trad?"拾":"十") } ;;金额转换 GetMoneyFormat(Num){ Local String String:="" if Num~="[^0-9.]" Return "" if InStr(Num,"."){ len:=StrLen(Integer:=StrSplit(Num,".")[1]),decimal:=StrSplit(Num,".")[2] }Else len:=StrLen(Integer:=Num) DllCall("msvcrt.dll\_wcsrev", "Ptr", &Integer, "CDecl") Integer:=Trim(RegExReplace(Integer,"(\d{4})","$1,"),",") Loop,Parse,Integer,`, { if (A_LoopField<>"") { if Item:=this.FormatDigital(A_LoopField,["拾","佰","仟"]) String.= this.List.AmountUnits[A_Index] Item } } DllCall("msvcrt.dll\_wcsrev", "Ptr", &String, "CDecl") ;;字符反转 String:=RegExReplace(RegExReplace(String,this.List.DigitalTrad[0] "{2,}",this.List.DigitalTrad[0]),this.List.DigitalTrad[0] "(?=" this.List.AmountUnits[2] "|" this.List.AmountUnits[3] "|" this.List.AmountUnits[4] "|" this.List.AmountUnits[5] "|" this.List.AmountUnits[6] ")") String:=RegExReplace(String,this.List.DigitalTrad[0] "+$|^" this.List.DigitalTrad[0]) if decimal { if Item:=this.FormatDigital(decimal,["角","分","厘","毫"],False){ String.= "元" Item String:=RegExReplace(String,this.List.DigitalTrad[0] "(角|分|厘|毫)",this.List.DigitalTrad[0]) String:=RegExReplace(String,this.List.DigitalTrad[0] "+$|^" this.List.DigitalTrad[0]) }Else String.="元整" }Else{ String.="元整" } Return RegExReplace(String,"^" this.List.DigitalTrad[1] "拾","拾") } ;;千分位匹配 FormatDigital(Num,Units,Reverse:=True,trad:=True){ Local String String:="" if (Num~="^\d+$") { Loop,% StrLen(Num) { if (SubStr(Num,A_Index,1)<>""){ String.=(trad?this.List.DigitalTrad[SubStr(Num,A_Index,1)]:this.List.DigitalSimp[SubStr(Num,A_Index,1)]) . (!Reverse?SubStr(Num,A_Index,1)?Units[A_Index]:trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0]:SubStr(Num,A_Index+1,1)?Units[A_Index]:"") } } } String:=RegExReplace(String,(trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0]) "{2,}",trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0]) Return StrLen(Num)-1<objlength(Units)? String . (trad?this.List.DigitalTrad[0]:this.List.DigitalSimp[0]):String } ;;2—36进制互转 ConvertBase(InBase, OutBase, nptr){ static u := A_IsUnicode ? "_wcstoui64" : "_strtoui64" static v := A_IsUnicode ? "_i64tow" : "_i64toa" VarSetCapacity(s, 66, 0) value := DllCall("msvcrt.dll\" u, "Str", nptr, "UInt", 0, "UInt", InBase, "CDECL Int64") DllCall("msvcrt.dll\" v, "Int64", value, "Str", s, "UInt", OutBase, "CDECL") return s } }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)