所以这是一个有点奇怪的问题,我缺乏要搜索的单词(英语不是我的母语)。
我有来自 MySQL 数据库的 double
值。
我在表格中显示这些值,但需要将值显示为百万和百分比。
示例数据:
值1:16658807.49
值2:94182053.40718205
值3:1005668.7204374762
值4: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
这还不错。
当我尝试计算每个问题的百分比时,实际问题就出现了:
(值1/112269423.46428402144)*100
= 14.838240881587516953758075138633
(值2/112269423.46428402144)*100
= 83.889317768825935717434356973035
(值3/112269423.46428402144)*100
= 0.8957636811570578380232989593602
(value4/112269423.46428402144)*100
= 0.37667766842948949078426892897153
但是,我需要将百分比显示为整数(去掉小数点)。
如果我使用 Math.ceil
或 Math.round
执行此操作,则总百分比值加起来不会达到 100%
百万代表也是如此。
有什么帮助吗?
最佳答案
好的,我想我现在明白你的问题了。希望这个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);
关于javascript - 对零件号进行四舍五入/向上取整以匹配总计值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25296331/