轮数到最接近的千位,向上或向下取决于数字

时间:2014-11-13 10:29:20

标签: javascript

我想将一个数字四舍五入到最接近的千位,此时我正在使用它:

Math.ceil(value/1000)*1000;

但是这总是向上,如果我输入1001它会转到2000,我想上升或下降取决于数字,例如1001变为1000或1400变为1000但1500变为2000

编辑:

if(value<1000){
  value = 1000;
}else{
  value = Math.round(value/1000)*1000;
}

5 个答案:

答案 0 :(得分:47)

这将做你想要的:

Math.round(value/1000)*1000

的示例:

Math.round(1001/1000)*1000
1000
Math.round(1004/1000)*1000
1000
Math.round(1500/1000)*1000
2000

答案 1 :(得分:3)

var rest = number % 1000; 
if(rest > 500) 
{ number = number - rest + 1000; } 
  else 
{ number = number - rest; } 

也许有点直接..但是这样做

编辑:当然这应该是某种myRound()函数

我读到了你的1需要舍入到1000的问题。 与其他行为相比,这种行为是有争议的 - 因此您必须添加以下内容:

if(number < 1000)
{  number = 1000; return number; }

你的功能;

答案 2 :(得分:1)

不是确切的点,但是要将 1250 之类的数字四舍五入到 1.2k 或 55730 到 55,7m,您可能会使用以下内容:

let value = 90731+'';
let len = value.length;
let sym = len>6?'m':'k';
let hundred = (len==9||len==6);
if(len>3){
  value = value.slice(0,-3)+(hundred?'':'.'+value.charAt(1))+sym;
};

答案 3 :(得分:0)

通过使用ES3 Number方法,如果没有定义小数位,则执行舍入。

(value / 1000).toFixed() * 1000



<小时/> 最初的答案是:

(value / 1000).toFixed(3) * 1000;

然而这是不正确的,因为该值将返回确切的原始数字,而不是影响该值的ceil / floor。

答案 4 :(得分:0)

所以下面的这个函数允许你把一个数字四舍五入到最接近的near,基本上你可以把一个数字四舍五入到最接近的 10 或 1000,只需通过 10,1000 附近。仅此而已。

例如,如果我想将 10 舍入到最接近的 10,它不应该像接受的答案那样返回 20,它应该返回 10。

function roundUp(number,near){
  if(number%near===0) return number;
    return  parseInt(number / near) * near+near;
  
}

console.log(roundUp(110,10)) // 110
console.log(roundUp(115,10)) // 120
console.log(roundUp(115,100)) // 200