如何将后端返回的数值与指定数字进行乘法运算?
问题描述
我有一个脚本可获取参数名称并将其数值嵌入表格(截图所示),现需将数值0.00000407与另一个数字相乘,但此前未处理过这类数据运算,急需完成该功能。
HTML代码
<div class="volume-label">Profability 100mh/24ч</div> <div id="hashrentReward"> <span style="color:#000000;"><strong></strong></span> </div>
JS代码
function refreshData(){ var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4 && xmlHttp.status == 200) { console.log(xmlHttp.responseText); makeValuesMain(xmlHttp.responseText); } else if(xmlHttp.status != 200 && xmlHttp.status != 0) { console.log('HTTP return code is ' + xmlHttp.status); makeValuesMain(''); } } url = location.protocol + '//' + '' + '/api/pool'; xmlHttp.open("GET", url, true); xmlHttp.send(null); } function makeValuesMain(json_string) { try { var obj = JSON.parse(json_string); } catch(e) { if(e instanceof SyntaxError) console.log(e); var obj = {result:{}}, n_a = '-'; obj.result['unpaidBalance'] = n_a; obj.result['unconfirmedBalance'] = n_a; obj.result['workersOnline'] = n_a; obj.result['currentHashrate'] = n_a; obj.result['dayReward'] = n_a; obj.result['lastShare'] = n_a; obj.result['totalPaid'] = n_a; obj.result['blocksFound'] = n_a; } console.log(obj.result); drawValues(obj.result); } function drawValues(values) { var graphHeader = ''; for(var key in values) { if(key == 'avgHashrate') { graphHeader = values[key]; continue; } if(key == 'speed') { graph_data = values[key]; continue; } var el_id = key.charAt(0) + key.slice(1), el = document.getElementById(el_id); if(typeof(el) != 'undefined' && el != null) { spans = el.getElementsByTagName('span'), spans[0].innerHTML = '<b>' + values[key] + '</b>'; } } }
解决方案
假设你要计算的是接口返回的dayReward字段(即数值0.00000407),需要和指定数字相乘后显示,可按以下方式修改代码:
方式1:直接修改目标字段的显示值
在drawValues函数中,对目标字段添加乘法运算逻辑:
function drawValues(values) { var graphHeader = ''; // 替换为你需要的相乘倍数 const multiplier = 2; for(var key in values) { if(key == 'avgHashrate') { graphHeader = values[key]; continue; } if(key == 'speed') { graph_data = values[key]; continue; } var el_id = key.charAt(0) + key.slice(1), el = document.getElementById(el_id); if(typeof(el) != 'undefined' && el != null) { let displayValue = values[key]; // 仅对dayReward字段进行计算 if(key === 'dayReward' && displayValue !== '-'){ // 转换为数字并相乘,保留8位小数避免浮点数异常 displayValue = (parseFloat(displayValue) * multiplier).toFixed(8); } spans = el.getElementsByTagName('span'), spans[0].innerHTML = '<b>' + displayValue + '</b>'; } } }
方式2:将计算结果显示到hashrentReward元素中
如果需要把计算后的值单独放到页面的hashrentReward容器里,可在drawValues函数末尾添加单独处理逻辑:
function drawValues(values) { var graphHeader = ''; // 替换为你需要的相乘倍数 const multiplier = 2; // 原循环逻辑保持不变 for(var key in values) { if(key == 'avgHashrate') { graphHeader = values[key]; continue; } if(key == 'speed') { graph_data = values[key]; continue; } var el_id = key.charAt(0) + key.slice(1), el = document.getElementById(el_id); if(typeof(el) != 'undefined' && el != null) { spans = el.getElementsByTagName('span'), spans[0].innerHTML = '<b>' + values[key] + '</b>'; } } // 单独处理hashrentReward的计算显示 const rewardEl = document.getElementById('hashrentReward'); if(rewardEl && values.dayReward !== '-'){ const calculatedReward = (parseFloat(values.dayReward) * multiplier).toFixed(8); const spans = rewardEl.getElementsByTagName('span'); if(spans.length > 0){ spans[0].innerHTML = '<b>' + calculatedReward + '</b>'; } } }
注意事项
- 确保接口返回的
dayReward是可转换为数字的格式,若为字符串需用parseFloat()转换 - 使用
toFixed(n)控制小数位数,避免浮点数运算出现精度问题 - 根据实际需求替换
multiplier变量的值
内容的提问来源于stack exchange,提问作者jade2216
相关产品推荐
相关产品推荐

