之前练习了一个数字转英文表述,这次写一个转中文大写的,代码已经通过OJ的测试 ,范围从 [0,999999999999]
package main import ( "fmt" ) var nums []rune = []rune{'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾'} var flag bool //[0-9] func ac10(a int) { if !flag { if a != 0 { fmt.Printf("%c元", nums[a]) } else { fmt.Print("元") } } else { if a != 0 { fmt.Printf("%c", nums[a]) } } } //[10-99] func ac99(a int) { if a < 10 { ac10(a) return } s := a / 10 g := a % 10 if s != 1 { fmt.Printf("%c拾", nums[s]) } else { fmt.Print("拾") } ac10(g) } //[100-999] func ac999(a int) { if a < 100 { ac99(a) return } s := a / 100 g := a % 100 fmt.Printf("%c佰", nums[s]) if g < 10 && g != 0 { fmt.Print("零") } ac99(g) } //[1000-9999] func ac9999(a int) { if a < 1000 { ac999(a) return } s := a / 1000 g := a % 1000 fmt.Printf("%c仟", nums[s]) if g < 100 && g != 0 { fmt.Print("零") } ac999(g) } //[10000-99999999] func ac99999999(a int) { if a < 10000 { ac9999(a) return } s := a / 10000 g := a % 10000 flag = true ac9999(s) flag = false fmt.Print("万") if g < 1000 && g != 0 { fmt.Print("零") } ac9999(g) } //[99999999-999999999999] func ac999999999999(a int64) { if a < 100000000 { ac99999999(int(a)) return } s := int(a / 100000000) g := int(a % 100000000) flag = true ac9999(s) flag = false fmt.Print("亿") if g < 10000000 && g != 0 { fmt.Print("零") } ac99999999(g) } func bC(t int) { s := t / 10 g := t % 10 if s != 0 && g != 0 { fmt.Printf("%c角%c分", nums[s], nums[g]) } else if s == 0 && g != 0 { fmt.Printf("%c分", nums[g]) } else { fmt.Printf("%c角", nums[s]) } } func toC(rmb float32) { a := int64(rmb * 100) b := int(a % 100) a /= 100 if a != 0 && b != 0 { ac999999999999(a) bC(b) } else if a == 0 && b != 0 { bC(b) } else if a != 0 && b == 0 { ac999999999999(a) fmt.Print("整") } else { fmt.Print("零元整") } } func main() { var rmb float32 for { _, err := fmt.Scan(&rmb) if err != nil { return } fmt.Print("人民币") toC(rmb) fmt.Println() } }
转载请注明:晋坤 的博客 » golang实现万亿级别以下阿拉伯数字转中文大写金额