package cn.iocoder.yudao.module.qcreport.engine; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * JS 值语义。 *
* 渲染与规则求值的产物要跟前端逐字一致,而 Java 的默认类型转换和 JS 有几处对不上
* ({@code String.valueOf(60.0D)} 是 "60.0"、{@code String.valueOf(true)} 是 "true"、
* 数组 toString 是 "[1, 2]")。凡是拿值当文本用的地方都走这里,别用 Java 的默认转换。
*/
public final class JsValues {
private JsValues() {
}
/** {@code String(value)}:null 得空串、布尔得 true/false、数组按逗号连接 */
public static String asText(Object value) {
if (value == null) {
return "";
}
if (value instanceof Boolean bool) {
return bool ? "true" : "false";
}
if (value instanceof Double || value instanceof Float || value instanceof BigDecimal) {
return Numbers.toString(((Number) value).doubleValue());
}
if (value instanceof Integer || value instanceof Long) {
return String.valueOf(value);
}
if (value instanceof List> list) {
List