XSLT无内置数字转英文函数,需用递归模板实现:先定义0–19和20–90映射表,再按三位分组(百十个),递归处理并添加thousand/million等量词。

XSLT 本身没有内置函数直接把数字转成英文单词(比如 123 → "one hundred twenty-three"),但可以通过递归模板手动实现。核心思路是:把数字按位拆解(个、十、百、千等),分别映射为对应英文单词,再组合拼接。
先定义 0–19 和 20–90 的英文单词,用 <variable></variable> 或外部 XML 映射文件存储。例如:
<xsl:variable name="ones"> <word n="0">zero</word> <word n="1">one</word> <word n="2">two</word> ... <word n="19">nineteen</word> </xsl:variable> <p><xsl:variable name="tens"> <word n="2">twenty</word> <word n="3">thirty</word> ... <word n="9">ninety</word> </xsl:variable>
英文读数习惯按“百、十、个”为一组(如 123,456 → "one hundred twenty-three thousand four hundred fifty-six"),所以先将数字转为字符串,再从高位开始每三位切分,用递归模板分别处理每组,并加上 thousand、million 等量词。
number-to-words,接收整数参数把数字转成字符串后,从右向左每三位切一段(用 substring + 位置计算),用另一个模板按顺序处理:
– 最右段(0–2 位)→ 无量词
– 第二段(3–5 位)→ 后缀 "thousand"
– 第三段(6–8 位)→ 后缀 "million"
– 依此类推(billion, trillion)
每段内部仍调用上面的三位处理模板,段间用空格连接。
floor($n div 10) * 10 模拟,或转成字符串用 substring 截取各位xs:integer()、math:floor()、正则和更简洁的字符串操作基本上就这些。虽然写起来有点长,但逻辑清晰,复用性好。网上有现成的开源 XSLT 数字转英文模板(如 xslt-utils 项目),可直接参考或集成。
以上就是XSLT怎么把数字转换成英文单词的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号