2014-11-13 13 views
9

voglio per arrotondare un numero al migliaio più vicino, in questo momento sto usando questo:numero tondo al migliaio più vicino, alto o in basso a seconda del numero

Math.ceil(value/1000)*1000; 

ma questo va sempre, se digito 1001 andrà al 2000, voglio salire o scendere depeding sul numero, ad esempio 1001 va a 1000 o 1400 va a 1000, ma 1500 va al 2000

EDIT:

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

'Math.round' e non' Math.ceil' – R3tep

risposta

30

Questo farà quello che vuoi:

Math.round(value/1000)*1000 

esempi:

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

Sì, ma con round se scrivo 1 non salirà a 1000 e anche questo deve girare, se scrivo 1 deve andare a 1000, un Se funzionasse sì, lo so, volevo solo sapere se forse c'era un altro modo. –

+0

@GustavoSanchez Vuoi ignorare 0? Puoi controllare 0 e impostarlo a 1000 quindi. – simonzack

+0

Voglio che se 1 è il valore che arrotonda a 1000, sempre al migliaio più vicino. –

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

forse un po 'dritto in avanti .. ma questo lo fa

EDIT: ovviamente questo dovrebbe andare in una sorta di myRound() Funzione

Ho letto del problema con il tuo 1 che ha bisogno di arrotondare a 1000. questo comportamento è controversie rispetto al resto - quindi dovrete aggiungere qualcosa del tipo:

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

ontop della vostra funzione;

+0

Sì, volevo solo vedere se c'era una soluzione all'interno di .round, grazie in ogni caso: D –

+0

sì, riutilizzare tale funzione rende senzioso :) ma a volte fa risparmiare tempo semplicemente digitandolo - specialmente con questo comportamento speciale .. speravi che ti abbia aiutato comunque –

0

Utilizzando il metodo Numero ES3, esegue un arrotondamento se non è definita una posizione decimale.

(value/1000).toFixed() * 1000 




La risposta originale era:

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

Eppure questo non è corretto, a causa del valore restituirà il numero originale esatto, invece di incidere sulla ceil/piano sul valore.

Problemi correlati