JS运算

在单元格控件增加了一段编辑后的JS自动计算的逻辑,JS代码如下:

var fcount = this.getValue();

var fuion = _g().getWidgetByName("fuion").getValue();

var fmat = _g().getWidgetByName("fmat").getValue();

var hh = fmat+fuion

//获取当前控件值

var cpmc=FR.remoteEvaluate("value('单位重量','fweight','ff','"+hh+"')");

var row=FR.cellStr2ColumnRow(this.options.location).row;

//获取当前行号

_g().setCellValue(0,22,row,cpmc*fcount);

//将计算结果给当前行其他单元格赋值

但是遇到一个问题,假设数量是100,我直接在单元格填写100那重量的运算结果没问题,但是我将数量在100的基础上改成相同数量的负数值-100,那计算的重量仍还是刚刚100的计算结果,但是将100改成非相同数量的负数值以外的其他任意数值,计算结果都没问题,请问问什么这段JS为什么将数量在原基础上改成通过数量负数值,重量没有重新计算为负数?应该怎么改这段JS避免计算BUG?

image.png

FineReport yzm106003 发布于 2024-8-2 10:23 (编辑于 2024-8-2 11:14)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-8-2 10:25(编辑于 2024-8-2 10:26)

把获取到的值用js转成数值类型,应该是类型不一致导致的

在JavaScript中,将字符串转换为数值可以通过多种方式实现,以下是一些常用的方法:

使用Number构造函数

javascript

复制代码

var str = "123";  

var num = Number(str);  

console.log(num); // 输出: 123

使用parseInt或parseFloat函数

parseInt用于将字符串转换为整数。

parseFloat用于将字符串转换为浮点数。

javascript

复制代码

var str1 = "123";  

var num1 = parseInt(str1);  

console.log(num1); // 输出: 123  

 

var str2 = "123.45";  

var num2 = parseFloat(str)

  • yzm106003 yzm106003(提问者) 和数值类型没有关系,加了这个一样的结果
    2024-08-02 10:39 
  • 用户k6280494 用户k6280494 回复 yzm106003(提问者) alert()看下值
    2024-08-02 10:57 
  • yzm106003 yzm106003(提问者) 回复 用户k6280494 alert()看值是没问题,但是单元格值有问题,我把JS复制到编辑结束事件就可以了,用编辑后事件就有问题
    2024-08-02 11:38 
  • 用户k6280494 用户k6280494 回复 yzm106003(提问者) 那就是时间不对
    2024-08-02 11:42 
最佳回答
0
华莉星宸Lv7高级互助
发布于2024-8-2 10:27

可以把你需求说一下

建议直接在报表上写计算公式

最佳回答
0
快乐星光Lv5中级互助
发布于2024-8-2 10:28

你能不能先把这个变量名称搞好一点,不要这么混乱,看的我头疼。

var fuion = this.getValue();

var fmat = _g().getWidgetByName("fmat").getValue();

//获取当前控件值

var fcount = this.getValue();

var fuion = _g().getWidgetByName("fuion").getValue();

var fmat = _g().getWidgetByName("fmat").getValue();

  • yzm106003 yzm106003(提问者) ??
    2024-08-02 10:42 
  • 快乐星光 快乐星光 回复 yzm106003(提问者) 你的fuion、fcount 都是this.getValue(); 变量fmat被定义了两边一模一样的。能不能简洁一点。
    2024-08-02 11:06 
  • 快乐星光 快乐星光 回复 yzm106003(提问者) js计算数字时,加上Number()试一下:fmat+fuion;=》Number(fmat)+Number(fuion),cpmc*fcount也类似
    2024-08-02 11:08 
  • yzm106003 yzm106003(提问者) 回复 快乐星光 不好复制重复了,修改了
    2024-08-02 11:36 
  • yzm106003 yzm106003(提问者) 回复 快乐星光 用编辑结束事件就可以了,谢谢你
    2024-08-02 11:40 
最佳回答
0
很困想睡觉Lv5初级互助
发布于2024-8-2 11:27(编辑于 2024-8-2 11:28)

var fcount = this.getValue();

var fuion = _g().getWidgetByName("fuion").getValue();

var fmat = _g().getWidgetByName("fmat").getValue();

var hh = fmat + fuion;

// 获取当前控件值

var cpmc = FR.remoteEvaluate("value('单位重量','fweight','ff','"+hh+"')");

var row = FR.cellStr2ColumnRow(this.options.location).row;

// 将计算结果给当前行其他单元格赋值

_g().setCellValue(0, 22, row, cpmc * fcount);

// 强制刷新单元格,确保计算结果更新

_g().refreshCell(0, 22, row);

试一下,如果还不行,就输出一下变量名称看看

  • 5关注人数
  • 242浏览人数
  • 最后回答于:2024-8-2 11:28
    请选择关闭问题的原因
    确定 取消
    返回顶部