Golang 中文大写数字转换

学Golang写的第一个撇脚程序

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

//translate 将接受的数字转换为中文大写数字并附加单位
func translate(num float64) string {
	digital := []string{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}
	unit := []string{"仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元", "角", "分"}

	numString := strings.Split(strconv.FormatFloat(num*100, 'f', -1, 64), ".")
	integerString := numString[0]
	integer := make([]string, len(integerString))

	for i, v := range integerString {
		if value, err := strconv.Atoi(string(v)); err != nil {
			fmt.Println("转换失败")
		} else {
			integer[i] = digital[value]
		}
	}

	var result []string
	for i, v := range unit[len(unit)-len(integer):] {
		result = append(result, integer[i])
		result = append(result, v)
	}
	returnResult := strings.Join(result, "")
	//没有小数部分时删除掉末尾的"零角零分"
	returnResult = strings.Replace(returnResult, "零角零分", "", 1)

	return returnResult

}

func main() {
	s := bufio.NewScanner(os.Stdin)
	fmt.Print("[*] 请输入需要转换的数字: ")
	for s.Scan() {
		line := s.Text()
		if line == "exit" {
			os.Exit(0)
		}

		num, _ := strconv.ParseFloat(line, 64)
		if num > 999999999999 {
			fmt.Println("[*] 单位不应该大于千亿")
		} else {
			fmt.Printf("[+] %s \n", translate(num))
		}

		fmt.Print("\n[*] 请输入需要转换的数字: ")
	}
}

运行结果

PS C:\Users\root\Desktop\learngo> .\one.exe
[*] 请输入需要转换的数字: 8200.56
[+] 捌仟贰佰零拾零元伍角陆分 

[*] 请输入需要转换的数字: 200
[+] 贰佰零拾零元 

[*] 请输入需要转换的数字: 1234567891234
[*] 单位不应该大于千亿

Golang打包exe真舒服啊,比Python小多了😁

发表评论

电子邮件地址不会被公开。 必填项已用*标注