You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pentaho Data Integration中基于Rhino引擎将文本转数值的问题求助

Pentaho Data Integration字符串转数值格式问题解决

问题根源

你当前的代码存在两个关键问题:

  1. 需求是将"6.5"转换为"6,5",但代码里写的是density.replace(",", "."),逻辑完全颠倒——这是把逗号替换成小数点,和你要的操作相反。
  2. 报错org.mozilla.javascript.UniqueTag cannot be cast to java.lang.Number,是因为Rhino引擎中parseFloat返回NaN时(比如处理空值、非数字字符串),NaN以UniqueTag类型存在,无法直接转换为PDI需要的Java数值类型。

修正后的JavaScript代码

如果坚持用JavaScript步骤,调整逻辑并处理异常情况:

// 从PDI变量获取density的值,空值时返回null
var density = getVariable("density", null);
if (density && density.trim() !== "") {
    // 把小数点替换成逗号,匹配你的需求逻辑
    var formattedDensity = density.replace(".", ",");
    // 若需要带逗号的字符串格式,直接存入变量;若要数值类型,请勿存带逗号的内容(PDI数值默认以小数点为分隔符)
    setVariable("num_density", formattedDensity);
} else {
    // 处理空值或无效输入的情况
    setVariable("num_density", null);
}

注意:如果最终目标是数值类型,带逗号的属于字符串展示格式,别混淆类型——PDI的数值字段默认用小数点,要展示成逗号格式需用专门的格式化步骤。

推荐:使用PDI内置步骤(无需写代码)

PDI自带的步骤更稳定,无需手写代码:

  • Replace in String步骤:
    • 选择要处理的变量/字段density
    • 搜索内容填.,替换内容填,
    • 将结果输出到新变量/字段num_density
  • Format Values步骤(若需将数值转为带逗号的展示格式):
    • 先确保数值为标准小数点格式,再用此步骤设置格式为#,##0.0,即可输出6,5这类字符串。

Java代码替代方案(避开Rhino引擎问题)

如果不想用Rhino,可直接使用PDI支持的Java表达式:

String density = getVariable("density", "");
if (!density.isEmpty()) {
    String result = density.replace(".", ",");
    setVariable("num_density", result);
} else {
    setVariable("num_density", null);
}

内容的提问来源于stack exchange,提问作者Cesare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:15:12