GO 大写金额转换

本文介绍了一个用GO语言实现的大额数字转汉字的功能,通过自定义正则表达式进行字符串替换来去除冗余的零和规范单位,实现了精确到分的金额汉字转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,练习一下GO的语法,有什么BUG报告我一下啊,初步测试了一下





-------------------------------------------------------------------------------------------------------------------------------------- 

package main

import (
  "fmt"
  "strconv"
_ "strings"
  "math"
  "regexp"
)
func AmountConvert(p_money float64,p_round bool)string{
    var   NumberUpper =[]string{"壹", "贰","叁","肆","伍","陆","柒","捌","玖","零"}
    var   Unit =[]string{"分","角","圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"}
    var   regex=[][]string{
	{"零拾","零"},{"零佰","零"},{"零仟","零"},{"零零零","零"},	{"零零","零"},
	{"零角零分","整"},{"零分","整"},{"零角","零"},{"零亿零万零元","亿元"},
	{"亿零万零元","亿元"},{"零亿零万","亿"},{"零万零元","万元"},{"万零元","万元"},
	{"零亿","亿"},{"零万","万"},{"拾零圆","拾元"},{"零圆","元"},{"零零","零"}}
	str,DigitUpper,Unit_Len,round:="","",0,0	
	if (p_money==0){return "零"	}	
	if (p_money<0){str="负";p_money=math.Abs(p_money)}
    if (p_round){
     	round=2
    }else{
	round=1}
	Digit_byte:=[]byte(strconv.FormatFloat(p_money,'f',round+1,64)) //注意币种四舍五入
	Unit_Len=len(Digit_byte)-round
	 
	for _,v:=range(Digit_byte){
      if (Unit_Len>=1 && v!=46){	
		s,_:=strconv.ParseInt(string(v), 10, 0)
		if (s!=0){ 
	          DigitUpper=NumberUpper[s-1]
			 
		}else{
		      DigitUpper="零"		   
		}	
		str=str+DigitUpper+Unit[Unit_Len-1]		
	    Unit_Len=Unit_Len-1 		
	 } 			   
	}
	for i,_:=range(regex){		
		reg:= regexp.MustCompile(regex[i][0])
		str=reg.ReplaceAllString(str,regex[i][1])		
	}
if (string(str[0:3])=="元"){
   str= string(str[3:len(str)])
}
if (string(str[0:3])=="零"){
str= string(str[3:len(str)])
} 
return str
}

func main(){
fmt.Println(AmountConvert(700.098,true)) 
//test example
//-1010000011.21 负壹拾亿壹仟万零壹拾壹圆贰角壹分
//1010000011.21  壹拾亿壹仟万零壹拾壹圆贰角壹分
//1000010000.01  壹拾亿零壹万元零壹分
//700.13 柒佰元壹角叁分
//700.03 柒佰元零叁分
//700.098 柒佰元壹角整
//700.98 柒佰元玖角捌分
//70.98 柒拾元玖角捌分
//7.98  柒圆玖角捌分
//0.098 壹角整
//0.98  玖角捌分
//98   玖拾捌圆整
//
}
  

   
   

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值