Thymeleaf 随机数生成与格式化详解
本文提出的示例均在 Thymeleaf 3.1 上经过测试。
可适用于多种使用 Thymeleaf 的场景,如 Halo CMS 主题获取随机数。
整数
生成范围在 [min, min+range)
中的随机整数
${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*range+min),0,0)}
生成范围在 [min, max]
中的随机整数
${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*(max-min+1)+min),0,0)}
点我查看示例
一个 p
标签,文本内容为一个范围在 [1, 6)
([1, 5]
) 的整数,可能的结果有:1
, 2
, 3
, 4
, 5
方法一
<p
th:with="range=5,min=1"
th:text="${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*range+min),0,0)}"
></p>
方法二
<p
th:with="max=5,min=1"
th:text="${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*(max-min+1)+min),0,0)}"
></p>
用作列表索引值
用作列表索引值其实不需要 #numbers.formatDecimal
。如下示例,将两处 my_list
修改为实际列表,就可以随机显示一个列表中的值。
点我查看示例
<p
th:with="randomIndex=${T(java.lang.Math).floor(T(java.lang.Math).random()*#lists.size(my_list))}"
th:text="${my_list[randomIndex]}"
></p>
控制结果形式
生成范围在 [min, min+range)
中的随机整数。结果形式为:整数部分位数大于等于 integerDigits
(不足的位数用前导 0 补足),小数部分位数等于 decimalDigits
(用 0 补足不够的位数)
${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*range+min),integerDigits,decimalDigits)}
生成范围在 [min, max]
中的随机整数。结果形式为:整数部分位数大于等于 integerDigits
(不足的位数用前导 0 补足),小数部分位数等于 decimalDigits
(用 0 补足不够的位数)
${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*(max-min+1)+min),integerDigits,decimalDigits)}
点我查看示例
一个 p
标签,文本内容为一个范围在 [0, 5)
([0, 4]
) 的整数,可能的结果有:000.00
, 001.00
, 002.00
, 003.00
, 004.00
方法一
<p
th:with="range=5,min=0,integerDigits=3,decimalDigits=2"
th:text="${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*range+min),integerDigits,decimalDigits)}"
></p>
方法二
<p
th:with="max=4,min=0,integerDigits=3,decimalDigits=2"
th:text="${#numbers.formatDecimal(T(java.lang.Math).floor(T(java.lang.Math).random()*(max-min+1)+min),integerDigits,decimalDigits)}"
></p>
小数/浮点数
生成范围在 [min, max)
中的随机浮点数
${T(java.lang.Math).random()*(max-min)+min}
点我查看示例
一个 p
标签,文本内容为一个范围在 [0.5, 1.8)
的浮点数,可能的结果有:1.46833041859471749
, 0.5578399752996518908
, 1.15072203796468388
等
<p
th:with="max=1.8,min=0.5"
th:text="${T(java.lang.Math).random()*(max-min)+min}"
></p>
控制结果形式
生成范围在 [min, max)
中的随机浮点数。结果形式为:整数部分位数大于等于 integerDigits
(不足的位数用前导 0 补足),小数部分位数等于 decimalDigits
(用 0 补足不够的位数)
${#numbers.formatDecimal(T(java.lang.Math).random()*(max-min)+min,integerDigits,decimalDigits)}
点我查看示例
一个 p
标签,文本内容为一个范围在 [0.5, 150.8)
的浮点数,可能的结果有:00.83
, 70.22
, 150.23
等
<p
th:with="max=150.8,min=0.5,integerDigits=2,decimalDigits=2"
th:text="${#numbers.formatDecimal(T(java.lang.Math).random()*(max-min)+min,integerDigits,decimalDigits)}"
></p>
原项目相关进展
截至此文发布时(2025.2.19),Thymeleaf 关于随机数的 Issue 依旧无新动态,保持开放状态:
Random integer in #numbers · Issue #787 · thymeleaf/thymeleaf
0