Javascript kullanarak bir tam sayı en yakın 10'a nasıl yukarı veya aşağı yuvarlanır


84

Javascript kullanarak, bir kullanıcının geçirdiği sayıyı en yakın 10'a yuvarlamak istiyorum. Örneğin, 7'yi geçerse 10'u, 33'ü geçerse 30'u döndürmeliyim.

Yanıtlar:


164

Sayıyı 10'a bölün, sonucu yuvarlayın ve tekrar 10 ile çarpın:

var number = 33;
console.log(Math.round(number / 10) * 10);


12
Math.floorYukarı doğru yuvarlamayı önlemek istiyorsanız, bu teknik de işe yarar
Alex W

11
Yuvarlamak için Math.ceil yöntemini kullanabilirsiniz.
Kerem Demirer


20

Nerede i bir int.

En yakın 10 katına yuvarlamak için yani

11, 10 olur
19, 10
olur 21, 20 olur

parseInt(i / 10, 10) * 10;

En yakın 10 katına yuvarlamak için yani

11 20 olur 19
20 olur
21 30 olur

parseInt(i / 10, 10) + 1 * 10;  

4
Olmaması gerekir: (parseInt (i / 10, 10) + 1) * 10; ?
user3924331

@ user3924331, haklısın. Doğru cevap (parseInt (i / 10, 10) + 1) * 10; Düzenlemeler en az 6 karakter olmalıdır, bu nedenle yalnızca bu iki parantezi eklemek mümkün değildir ... ¯_ (ツ) _ / ¯
Fernando

En yakın 10'a kadar, 100 değeri için +10 eklenir, yani 110 olur. En yakın 10'a, 100 için -10 çıkarmaz, bu nedenle 100, 100 kalır.
TitanFighter

6

Benzer bir şeye ihtiyacım vardı, bu yüzden bir fonksiyon yazdım. Fonksiyonu burada ondalık yuvarlama için kullandım ve tamsayı yuvarlama için de kullandığım için, burada da cevap olarak ayarlayacağım. Bu durumda, yuvarlamak istediğiniz sayıyı ve ardından yuvarlamak istediğiniz sayı olan 10'u iletin.

function roundToNearest(numToRound, numToRoundTo) {
    return Math.round(numToRound / numToRoundTo) * numToRoundTo;
}

Bunu bir fonksiyona dönüştürmüş olman hoşuma gitti, ancak bu kabul edilen cevaptan farklı bir çıktı veriyor mu ve değilse, neden farklı bir formül kullandın?
RozzA

Aynı değeri döndürür, ancak formül farklıdır çünkü kullanımı kolaylaştırır. Örneğin, en yakına yuvarlamak .25istiyorsanız, basitçe .25ikinci argüman olarak kullanabilirsiniz . Formülleri diğer cevaplarda kullanacak 4olsaydınız, yuvarlamak istediğinizde ikinci argüman olarak kullanmanız gerekir .25, ki bu sezgisel değildir.
cjbarth

bunu ispatlayabilir misin? Konsolda biraz test yaptım ve kabul edilen cevap .252. argüman olarak kullanarak doğru cevabı döndürüyorfunction roundTo(x,y){return Math.round(x / y) * y}
Tek satırlık

@RozzA, haklısın. Benzer bir sorudaki cevapları düşünüyordum. İşlevimi basitleştireceğim.
cjbarth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.