2011-12-13 9 views
7

Ho una variabile numero compresa tra 0 e 100. Potrebbe essere qualcosa come 83.333334.Ottenere un numero divisibile per cinque con Math.Round

Desidero utilizzare Math.Round per arrotondare il numero (ad esempio Math.round(83.333334);). Come posso fare in modo che il risultato sia sempre divisibile per cinque (cioè nell'insieme [0, 5, 10, 15 ... 85, 90, 95, 100])?

risposta

24

Dividere per 5, intorno ad essa, moltiplicare per 5.

alert(Math.round(83/5) * 5); 

jsFiddle Demo

+2

+1 Aggiunto un divertente demo jsFiddle. – kapa

+0

@bazmegakapa fico. –

+2

@ Xeon06 c'è qualche nome matematico per questa logica? – Reddy

2

Utilizzare lo modulus operator per "arrotondare" il numero a un multiplo di 5, vedere l'esempio di seguito.

var x = Math.round(83.333334); 

x = x - (x % 5); 

Se vi piacerebbe "rotonda verso lo zero" (e hanno un valore corretto per i numeri negativi lontato) usare qualcosa di simile:

x = Math[x < 0 ? 'ceil' : 'floor'] (x/5) * 5; 
+3

Will "rotondo" 89 a 85. – kapa

+0

@bazmegakapa Questo è corretto, e ad essere onesti ho pensato che questo era quello che chiedeva PO per, ecco perché ho scritto "rotondo". Ma forse (s) egli intendeva intorno al multiplo più vicino di cinque. –

1

dare una prova .

Math.round(val/5) * 5; 
+1

Non riesco a trovare nessun caso in cui l'aggiunta di 2,5 farà alcuna differenza nel risultato. Esempi? * Modifica: * In realtà, questo causa risultati errati. Se inserisco '80', lo farei come' 82.5' che risulterebbe in '85' ad il multiplo più vicino di 5, quando dovrebbe essere ancora' 80'. – animuson

+0

@animuson Mi scuso, nella mia testa, stavo pensando a 'floor', non a' round'. Fisso! – cheeken

2
function roundDownToMultiple(number, multiple) { 
    return number - (number % multiple); 
} 

roundDownToMultiple(86, 5); // 85 

roundDownToMultiple(89, 5); // 85 

roundDownToMultiple(96, 5); // 95 
+0

Hai dimenticato tutto sui moduli, grazie! –

1

Usando questo Math.round(Math.floor(Math.random() * 100)/5) * 5 È possibile ottenere i numeri divisibili per 5.

  • 100 - è l'intervallo del risultato.
Problemi correlati