JS代码格式化修改表格的数值的格式
今天在cognos中第⼀次需要⽤到JS,主要是报表页⾯展⽰的时候是可能得到如下的数据
,我需要对其中类型中有⾦额字样的,后⾯的数值,精确2位⼩数;有百分⽐字样的,数值显⽰成百分⽐。如下
我先尝试了⾃⼰写⼀段HTML代码,对表格的数据进⾏格式化。
<html>
<head>
<script type="text/javascript">
function getInnerHTML()
{
ElementById("mytable").innerHTML);
}
formatMoney();
}
function formatMoney(){
var fisrTd = ElementsByTagName("td");
var i=0;
for(i=0;i<fisrTd.length;i=i+2){
if(fisrTd[i].innerHTML.indexOf("百分⽐")>=0){
alert(fisrTd[i].innerHTML)
fisrTd[i+1].innerHTML=accMul(fisrTd[i+1].innerHTML,100)+"%"
}
if(fisrTd[i].innerHTML.indexOf("⾦额")>=0){
alert(fisrTd[i].innerHTML)
fisrTd[i+1].innerHTML=outputmoney(fisrTd[i+1].innerHTML)
}
}
}
//乘法函数,⽤来得到精确的乘法结果
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会⽐较明显。这个函数返回较为精确的乘法结果。
//调⽤:accMul(arg1,arg2)
//返回值:arg1乘以 arg2的精确结果
function accMul(arg1,arg2)
{
var m=0,String(),String();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return place(".",""))*place(".",""))/Math.pow(10,m)
}
function outputmoney(number) {
number = place(/,/g, "");
if(isNaN(number) || number == "")
html文件格式化
return "";
number = und(number * 100) / 100;
if (number < 0)
return '-' + outputdollars(Math.floor(Math.abs(number) - 0) + '') + outputcents(Math.abs(number) - 0);
else
return outputdollars(Math.floor(number - 0) + '') + outputcents(number - 0);
}
//格式化⾦额
function outputdollars(number) {
if (number.length <= 3)
return (number == '' ? '0' : number);
else {
var mod = number.length % 3;
var output = (mod == 0 ? '' : (number.substring(0, mod)));
for (i = 0; i < Math.floor(number.length / 3); i++) {
if ((mod == 0) && (i == 0))
output += number.substring(mod + 3 * i, mod + 3 * i + 3);
else
output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
}
return (output);
}
}
function outputcents(amount) {
amount = und(((amount) - Math.floor(amount)) * 100);
return (amount < 10 ? '.0' + amount : '.' + amount);
}
</script>
</head>
<body>
<table border="1" id="mytable">
<tr id="tr1">
<td >类型</td>
<td>数值</td>
</tr>
<tr id="tr2">
<td >⾦额</td>
<td>10.1</td>
</tr>
<tr id="tr3">
<td >⼈数</td>
<td>100</td>
</tr>
<tr id="tr4">
<td >百分⽐</td>
<td>1</td>
</tr>
<tr id="tr5">
<td >总⾦额</td>
<td>12.12563</td>
</tr>
</table>
<input type="button" onclick="getInnerHTML()"
value="Alert innerHTML of table row" />
</body>
</html>
然后在cognos中,先给TABLE嵌套⼀个DIV,然后通过DIV的ID,获取到表格,再根据⽤以上JS代码去实现我需要的功能:<script type="text/javascript">
setTimeout(formatMoney,20)
function formatMoney(){
var tabObj = ElementById("div1");
var fisrTd = ElementsByTagName("td")
var i=0;
for(i=0;i<fisrTd.length;i=i+1){
if(fisrTd[i].innerHTML.indexOf("率")>=0){
//alert(fisrTd[i].innerText)
fisrTd[i+1].innerText=accMul(fisrTd[i+1].innerText,100)+"%"
}
if(fisrTd[i].innerHTML.indexOf("占⽐")>=0){
//alert(fisrTd[i].innerText)
fisrTd[i+1].innerText=accMul(fisrTd[i+1].innerText,100)+"%"
}
if(fisrTd[i].innerHTML.indexOf("额")>=0){
//alert(fisrTd[i].innerText)
fisrTd[i+1].innerText=outputmoney(fisrTd[i+1].innerText)
}
}
}
/* 乘法函数,⽤来得到精确的乘法结果
说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会⽐较明显。这个函数返回较为精确的乘法结果。调⽤:accMul(arg1,arg2)
返回值:arg1乘以 arg2的精确结果
*/
function accMul(arg1,arg2)
{
var m=0,String(),String();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return place(".",""))*place(".",""))/Math.pow(10,m)
}
function outputmoney(number) {
number = place(/,/g, "");
if(isNaN(number) || number == "")return "";
number = und(number * 100) / 100;
if (number < 0)
return '-' + outputdollars(Math.floor(Math.abs(number) - 0) + '') + outputcents(Math.abs(number) - 0);
else
return outputdollars(Math.floor(number - 0) + '') + outputcents(number - 0);
}
/*格式化⾦额
*/
function outputdollars(number) {
if (number.length <= 3)
return (number == '' ? '0' : number);
else {
var mod = number.length % 3;
var output = (mod == 0 ? '' : (number.substring(0, mod)));
for (i = 0; i < Math.floor(number.length / 3); i++) {
if ((mod == 0) && (i == 0))
output += number.substring(mod + 3 * i, mod + 3 * i + 3);
else
output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
}
return (output);
}
}
function outputcents(amount) {
amount = und(((amount) - Math.floor(amount)) * 100);
return (amount < 10 ? '.0' + amount : '.' + amount);
}
</script>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。