【发布时间】:2015-06-04 14:00:48
【问题描述】:
我有一个包含小数值的对象:evo、meteo 和 usage
我尝试用三个条件显示这个值:
- 值可以是正数和负数
- 值必须以百分比形式显示,不带任何小数
- (A) 必须为真
(A):Math.round(meteo*100)+Math.round(usage*100) = Math.round(evo*100)
例如,如果我们将 A with 应用于这些值
{evo: 0.1466, meteo: 0.1231, usage: 0.0235}
我们会得到无效的百分比:
evo: 15%
meteo: 12%
usage: 2%
由于值是四舍五入的,因此有时 (A) 未经过验证。 我正在研究一个 getSmooth 函数来调整四舍五入的值,以使方程 (A) 始终得到验证。
var smooth = getSmooth(Math.round(evo*100), Math.round(meteo*100), Math.round(usage*100);
function getSmooth(evo, meteo, usage){
// case we need to incremente something
if( Math.abs(evo) > Math.abs(meteo) + Math.abs(usage) ){
// case we need to incremente usage
if( Math.abs(meteo) > Math.abs(usage) ){
(usage > 0) ? usage++ : usage--;
}
// case we need to incremente meteo
else{
(meteo > 0) ? meteo++ : meteo--;
}
}
// case we need to decremente something
else{
// case we need to decremente usage
if( Math.abs(meteo) > Math.abs(usage) ){
(usage > 0) ? usage-- : usage++;
}
// case we need to decremente meteo
else{
(meteo > 0) ? meteo-- : meteo++;
}
}
return {
evo: evo,
meteo: meteo,
usage: usage
};
}
我的函数不能正常工作,它只处理 +1 递增/递减。 我很确定我正在努力做到这一点。
有没有更简单的方法来完成这项任务?
【问题讨论】:
-
如果你先四舍五入然后添加我不相信你可以保证平等(你所说的“A必须是真的”。)
-
Math.round(val*100)/100;
-
您是否有理由不能以更高的精度显示百分比?
-
你有没有你的函数不能正常工作的例子?
-
@RowlandShaw,可用的UX空间只能显示两位数,MaximePeloquin,我已经给了一个,
标签: javascript math rounding