2014-11-13 6 views
9

Ich möchte eine Zahl auf die nächsten Tausend, im Moment aufrunden Ich verwende diese:Runde Nummer nächsten Tausend, nach oben oder unten, je nach Anzahl

Math.ceil(value/1000)*1000; 

Aber das geht immer, wenn ich schreibe 1001 es bis 2000 gehen, ich will gehen nach oben oder unten von der Anzahl depeding, zum Beispiel 1001 geht bis 1000 oder 1400 geht bis 1000, aber 1500 geht bis 2000

EDIT:

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

'Math.round' und nicht' Math.ceil' – R3tep

Antwort

30

Dies wird tun, was Sie wollen:

Math.round(value/1000)*1000 

Beispiele:

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

Ja, aber mit Runde, wenn ich 1 tippe, geht es nicht bis 1000 und das muss auch runden, wenn ich 1 tippe, muss es auf 1000 gehen Wenn das funktionieren wird, weiß ich das, wollte nur wissen, ob es vielleicht einen anderen Weg gab. –

+0

@GustavoSanchez Sie möchten 0 ignorieren? Sie können nur nach 0 suchen und dann auf 1000 setzen. – simonzack

+0

Ich möchte, dass, wenn 1 der Wert ist, es auf 1000 rundet, immer auf die nächsten tausend. –

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

vielleicht gerade nach vorne etwas .. aber das macht es

EDIT: natürlich diese

in einer Art myRound() Funktion gehen

Ich lese über das Problem mit Ihrer 1 muss bis 1000 runden. dieses Verhalten ist im Gegensatz zu den anderen - so müssen Sie etwas hinzufügen wie:

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

ontop Ihrer Funktion;

+0

Ja wollte nur sehen, ob es vielleicht eine Lösung innerhalb der .round, danke oder so: D –

+0

ja, die Wiederverwendung dieser Funktion macht Sinn :), aber manchmal spart es Zeit einfach nur zu tippen - besonders mit diesem specialcase verhalten .. gehofft es hat dir eh geholfen –

0

Mithilfe der ES3 Number-Methode wird eine Rundung durchgeführt, wenn keine Dezimalstelle definiert ist.

(value/1000).toFixed() * 1000 




Die ursprüngliche Antwort lautete:

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

Doch dies falsch ist, aufgrund des Wertes wird die genaue Zahl wieder, statt beeinflusst die ceil/Boden auf dem Wert zurück.

Verwandte Themen