在JavaScript中舍入到最接近的0.05

Sam*_*Sam 13 javascript rounding

问题
有没有人知道在JavaScript中将浮点数舍入到最接近的0.05的方法?

BEFORE | AFTER
  2.51 | 2.55
  2.50 | 2.50
  2.56 | 2.60
Run Code Online (Sandbox Code Playgroud)

现行守则

var _ceil = Math.ceil;
Math.ceil = function(number, decimals){
    if (arguments.length == 1)
    return _ceil(number);

    multiplier = Math.pow(10, decimals);
    return _ceil(number * multiplier) / multiplier;
}
Run Code Online (Sandbox Code Playgroud)

其他地方...... return (Math.ceil((amount - 0.05), 1) + 0.05).toFixed(2);

这导致......

BEFORE | AFTER
  2.51 | 2.55
  2.50 | 2.55
  2.56 | 2.65
Run Code Online (Sandbox Code Playgroud)

Rob*_*b W 33

乘以20,然后除以20:

(Math.ceil(number*20)/20).toFixed(2)
Run Code Online (Sandbox Code Playgroud)

  • 虽然我认为这个改变是`Math.ceil(数字*20 - 0.5)/ 20).toFixed(2)` (4认同)
  • 1 = 20 * 0.05;你乘以 20 以便四舍五入到下一个整数然后再除以 20 相当于四舍五入到原始中的下一个 0.05。 (2认同)
  • @Sam考虑两个连续整数之间的浮点集,例如0和1:0.0,0.5,1.0,...,9.5.有二十个要素.因此,将当前数字乘以20,取上限,然后除以20. http://jsfiddle.net/Wcjau/1/.@Arth:正确,我以为他想要四舍五入到最近的数字. (2认同)

mar*_*yzm 10

我会选择实际除以你想要它的数字的标准,并将其四舍五入然后再将其再次乘以.这似乎是一种适当的工作方法,您可以使用任何数字,并保持您想要实现的目标的心理形象.

var val = 26.14,
    factor = 0.05;

val = Math.round(val / factor) * factor;
Run Code Online (Sandbox Code Playgroud)

这将适用于数十,数百或任何数字.如果你特别舍入到更高的数字,那么使用Math.ceil而不是Math.round.

另一种专门用于舍入到一个或多个小数位(而不是半个位置)的方法如下:

Number(Number(1.5454545).toFixed(1));
Run Code Online (Sandbox Code Playgroud)

它创建一个固定数字字符串,然后将其转换为真实字符串Number.


Art*_*rth 9

Rob补充说:

(Math.ceil(number*20 - 0.5)/20).toFixed(2)
Run Code Online (Sandbox Code Playgroud)

否则它总是向上舍入到最接近的0.05.

**更新**

很抱歉有人指出这不是orig海报想要的.

  • +1因为这正是_I_正在寻找的! (6认同)
  • 这可能不是 OP 所要求的,但这正是我所需要的。您在答案的开头缺少括号。它应该是`(Math.ceil(_amount*20 - 0.5)/20).toFixed(2)`(我修复了它)。 (2认同)
  • @usama 附加的“- 0.5”基本上将“ceil”方法转换为“round”方法,这是不必要的混乱..最好选择正确的方法! (2认同)