如题,练习一下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 玖拾捌圆整
//
}