业务需求:直接上代码
直接复制去用
import (
"errors"
"fmt"
"regexp"
"strconv"
"strings"
)
func main() {
// 300000189的单位是分,实际金额: 3000001.89
fmt.Println(Convert(300000189))
}
var (
sliceUnit = []string{"仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元", "角", "分"}
upperDigitUnit = map[string]string{
"0": "零",
"1": "壹",
"2": "贰",
"3": "叁",
"4": "肆",
"5": "伍",
"6": "陆",
"7": "柒",
"8": "捌",
"9": "玖",
}
)
func Convert(money int) (string, error) {
strMoney := strconv.Itoa(money)
if len(strMoney) > len(sliceUnit) {
return "", errors.New("太大了")
}
units := sliceUnit[len(sliceUnit)-len(strMoney):]
amounts := make([]string, len(units))
for idx, num := range strMoney {
amounts[idx] = fmt.Sprintf("%s%s", upperDigitUnit[string(num)], units[idx])
}
str := strings.Join(amounts, "")
reg, _ := regexp.Compile(`零角零分$`)
str = reg.ReplaceAllString(str, "整")
reg, _ = regexp.Compile(`零角`)
str = reg.ReplaceAllString(str, "零")
reg, _ = regexp.Compile(`零分$`)
str = reg.ReplaceAllString(str, "整")
reg, _ = regexp.Compile(`零[仟佰拾]`)
str = reg.ReplaceAllString(str, "零")
reg, _ = regexp.Compile(`零{2,}`)
str = reg.ReplaceAllString(str, "零")
reg, _ = regexp.Compile(`零亿`)
str = reg.ReplaceAllString(str, "亿")
reg, _ = regexp.Compile(`零万`)
str = reg.ReplaceAllString(str, "万")
reg, _ = regexp.Compile(`零*元`)
str = reg.ReplaceAllString(str, "元")
reg, _ = regexp.Compile(`亿零{0, 3}万`)
str = reg.ReplaceAllString(str, "^元")
reg, _ = regexp.Compile(`零元`)
str = reg.ReplaceAllString(str, "零")
return str, nil
}