7

50 から始まり 190 で終わる数字があります。ステップは常に 20 です -->

50, 70, 90, .... 190

今、これに従って四捨五入する必要があるテキスト フィールドから数値を取得します。もし 55 なら 70 になり、77 なら 90 になるはずです。もし 90 ならもちろん 90 のままです。

// 55 --> 60
number = Math.ceil(number / 10) * 10

20 のステップを使用して取得した数値を丸める方法は?

ありがとう!

4

4 に答える 4

23

オフセットを使用して、x の増分で丸めたい場合:

function round(number, increment, offset) {
    return Math.ceil((number - offset) / increment ) * increment + offset;
}
round(51,  20, 10) // 70
round(70,  20, 10) // 70
round(99,  20, 10) // 110
round(100, 20, 10) // 110
于 2013-01-31T14:14:22.150 に答える
3
function round(number,x,o) {
 o = ~~(o);
   return o + Math.ceil((number - o)/ x ) * x 
 }
 console.log(round (55,20,10)) //70
 console.log(round (77,20,10)) //90
 console.log(round (90,20,10)) //90

それを指摘する@Cerbrus thx

于 2013-01-31T14:08:10.940 に答える
1

たぶん、そのようなもので

number = Math.ceil( (number - 50) / 20 ) * 20 + 50;
于 2013-01-31T14:05:49.753 に答える
1
var number;
var a =number-10-((number-10)%20);
var result=a+30;
// does not work if num is 70 or 90 so
if(result-20==number)
Result=number;

またはワンライナーとして:

var result=number+20-((number-10)%20) - result-20==number : 0 ? 20;

ロジックは、最初に数値に 20 を追加するというものです。77 という数字を考えてみましょう。77+20=97 です。しかし、77+20-7=90 です。そして、7 は 77 と 70 の差で、以前の有効な数です。(number-10)%20 で差を求めることができます。ただし、番号が最初からOKの場合は機能しないため、最後のロジックになります。

于 2013-01-31T14:15:48.170 に答える