Oracle APEX 20.1中apex.item().setValue()加法运算异常求助
问题原因及解决方案
核心问题是apex.item().getValue()返回的是字符串类型,而非你以为的数值类型。
为什么加减乘除表现不一致?
JavaScript里运算符的行为有明确区别:
*、/、-这些算术运算符会自动将字符串转换为数值后计算,所以你测试的乘除减操作都正常;+既可以做加法,也可以做字符串拼接——当其中一个操作数是字符串时,它会触发拼接逻辑。你的to_amt是字符串"10",所以:"10" + 1结果是字符串"101",赋值后页面项显示101;"10" + .01结果是字符串"100.01",对应你看到的异常结果;
- 而静态值
10本身是数值类型,10 + .01自然是正常的数值加法,得到10.01。
解决办法
只要把getValue()返回的字符串转换成数值类型即可,有几种简单方式:
- 使用
parseFloat()转换:
to_amt = parseFloat(apex.item("P616_TO_AMT1").getValue()); apex.item("P616_FRM_AMT2").setValue(to_amt + .01); // 现在会返回10.01
- 使用一元
+运算符快速转换:
to_amt = +apex.item("P616_TO_AMT1").getValue(); apex.item("P616_FRM_AMT2").setValue(to_amt + .01);
- 也可以在运算时直接转换:
apex.item("P616_FRM_AMT2").setValue(parseFloat(apex.item("P616_TO_AMT1").getValue()) + .01);
转换后,to_amt变成数值10,加法就会按算术逻辑执行,得到预期的10.01。
内容的提问来源于stack exchange,提问作者LogicallyFunky
相关产品推荐
相关产品推荐

