所以这是一个有点奇怪的问题,我缺乏搜索的词汇(英语不是我的母语)。
我有来自MySQL数据库的double
个值。
我在表格中显示这些值,但需要显示数百万和百分比的值。
示例数据:
value1: 16658807.49
value2: 94182053.40718205
value3: 1005668.7204374762
value4: 422893.84666449524
这些值总计为112269423.46428402144。
我的toMillions
功能:
function toMillions(num, decimalPlaces) {
var str;
decimalPlaces = decimalPlaces || 0;
num = +num;
var factor = Math.pow(10, decimalPlaces);
str = Math.floor(num / (1000000 / factor)) / factor;
return str;
}
toMillions(112269423.46428402144,0)
= 112
这还不错。
当我尝试计算每个的百分比时,实际问题就出现了:
(value1 / 112269423.46428402144)*100
= 14.838240881587516953758075138633
(value2 / 112269423.46428402144)*100
= 83.889317768825935717434356973035
(value3 / 112269423.46428402144)*100
= 0.8957636811570578380232989593602
(value4 / 112269423.46428402144)*100
= 0.37667766842948949078426892897153
但是,我需要将百分比显示为整数(删除小数点)。
如果我使用Math.ceil
或Math.round
执行此操作,则总百分比值不会达到100%
百万代表也是如此。
任何帮助?
答案 0 :(得分:1)
好的,我想我现在明白你的问题。希望这个fiddle能够回答它。我冒昧地将每个百分比四舍五入到小数点后10位。现在,当它们被添加时,它们等于100.舍入过程本身是必不可少的,因为这些百分比中的一些(或全部?)是重复小数,并且JavaScript会自动切断它们。它们永远不会100%准确。问题是,距离足够接近?
JS:
function round_number(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
var v1 = 16658807.49;
var v2 = 94182053.40718205;
var v3 = 1005668.7204374762;
var v4 = 422893.84666449524;
var vals = [v1,v2,v3,v4];
var tot = v1 + v2 + v3 + v4;
document.getElementById('body').innerHTML += (tot+'<br/>');
for (var v in vals) {
vals[v] = (vals[v] / tot) * 100;
vals[v] += ' ';
vals[v] = round_number(vals[v], 10);//parseFloat(vals[v].substr(0, (vals[v].indexOf('.') + 16)), 10);
document.getElementById('body').innerHTML += (vals[v]+'<br/>');
}
tot = vals[0] + vals[1] + vals[2] + vals[3];
//tot += ' ';
//tot = tot.substr(0, (tot.indexOf('.') + 11));
document.getElementById('body').innerHTML += (tot+'<br/>');
这会在没有舍入的情况下切断任何小数。
JS:
var value1 = 16658807.49;
var newVal = (value1 / 112269423.46428402144)*100;
newVal = newVal + ' ';
newVal = newVal.substr(0, newVal.indexOf('.'));
这只会丢弃小数点。
JS:
var value1 = 16658807.49;
var newVal = (value1 / 112269423.46428402144)*100;
newVal = newVal + ' ';
var newVal_1 = newVal.substr(0, newVal.indexOf('.'));
var newVal_2 = newVal.substr((newVal.indexOf('.')+1));
newVal = newVal_1 + newVal_2;
要将您的弦号newVal
恢复为整数格式,请使用:
newVal = parseInt(newVal ,10);