我正在尝试将数字四舍五入到最接近的指定小数点。
我希望将其四舍五入为小数点.11,.22,.33,.44,.55,.66,.77,.88,而不是.99。而是.99应该是1。
例如:
1.14 -> 1.11
56.75 ->56.77
34.234 -> 34.22
1.01 -> 1 (not 1.11)
问题不是四舍五入到特定的小数位数,而是四舍五入到这些小数之一。
我试过了
(Math.round(parseFloat(number)*10)/9).toFixed(2);
我已经得到了我最想要的小数位,除了将1舍入为1.11和.55(例如,舍入为0.56),这是我不想要的。加上它超出了预期,显然是因为我乘以10,然后除以9。
我建议将整数部分和小数部分分开。
如果小数部分接近因子9,则返回整数部分加1,否则返回整数部分加校正后的小数部分。
function getRight(v) {
var i = Math.floor(v),
f = Math.round((v - i) / 0.11);
return i + (f === 9 || f * 0.11);
}
console.log([1.14, 56.75, 34.234, 1.01].map(getRight));
如果存在负值:
function getRight(v) {
var i = Math[v < 0 ? 'ceil' : 'floor'](v),
f = Math.round((v - i) / 0.11);
return i + (f === 9 || f * 0.11);
}
console.log([1.14, 56.75, 34.234, 1.01].map(getRight));
console.log([-1.14, -56.75, -34.234, -1.01].map(getRight));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句