Golang实现将数字单词转换为数值的方法
Golang实现将数字单词转换为数值的方法 你好, 有没有现成的包或代码片段可以帮助我将数字单词转换为数值? 示例: “two million three thousand nine hundred and eighty four” 转换为 “2003984” “twenty one” 转换为 “21” 等等 提前感谢
2 回复
我不确定是否存在这样的工具,但我的猜测是你可以使用 num2words 来帮助你编写反向实现。
更多关于Golang实现将数字单词转换为数值的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,可以通过自定义函数实现将数字单词转换为数值。以下是一个完整的示例代码,它支持从"zero"到"billion"的数字单词转换,包括复合数字(如"twenty one")和大型数字(如"two million")。
package main
import (
"fmt"
"strings"
)
var smallNumbers = map[string]int64{
"zero": 0, "one": 1, "two": 2, "three": 3, "four": 4,
"five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9,
"ten": 10, "eleven": 11, "twelve": 12, "thirteen": 13, "fourteen": 14,
"fifteen": 15, "sixteen": 16, "seventeen": 17, "eighteen": 18, "nineteen": 19,
"twenty": 20, "thirty": 30, "forty": 40, "fifty": 50,
"sixty": 60, "seventy": 70, "eighty": 80, "ninety": 90,
}
var largeNumbers = map[string]int64{
"hundred": 100,
"thousand": 1000,
"million": 1000000,
"billion": 1000000000,
}
func wordsToNumber(words []string) int64 {
var total, current int64
for _, word := range words {
if num, exists := smallNumbers[word]; exists {
current += num
} else if num, exists := largeNumbers[word]; exists {
if word == "hundred" {
current *= num
} else {
current *= num
total += current
current = 0
}
}
}
return total + current
}
func convertNumberWords(input string) int64 {
words := strings.Fields(strings.ToLower(input))
return wordsToNumber(words)
}
func main() {
examples := []string{
"two million three thousand nine hundred and eighty four",
"twenty one",
"one hundred and five",
"five thousand two hundred",
"one million",
}
for _, example := range examples {
cleaned := strings.ReplaceAll(example, " and ", " ")
result := convertNumberWords(cleaned)
fmt.Printf("'%s' -> %d\n", example, result)
}
}
运行结果:
'two million three thousand nine hundred and eighty four' -> 2003984
'twenty one' -> 21
'one hundred and five' -> 105
'five thousand two hundred' -> 5200
'one million' -> 1000000
代码说明:
- 定义了两个映射表:
smallNumbers处理基本数字(0-90),largeNumbers处理数量级单位(百、千、百万等) wordsToNumber函数遍历单词列表,累计计算数值- 处理"and"连接词时,在输入中将其替换为空格
- 支持复合数字的解析,如"twenty one"会被正确解析为21
这个实现可以处理大多数常见的数字单词表达形式,对于更复杂的用例可以进一步扩展映射表和处理逻辑。

