2017-01-30 7 views
1

ich den Wert nach einem zufälligen Dezimalwert abrunden möchteJavascript Runde Wert nach einer zufälligen Dezimalwert

Example(round up when value > x.90): 
18.25478 => 18 
18.7545 => 18 
18.90 => 19 
18.95 = > 19 

ich die Math.ceil und Math.Floor Methoden kennen, aber ich mag kombinieren Methode. Und ich lese auch, dass Math.floor und ceil langsam sind mit zu vielen Werten (ich werde 3000.000+ Werte in eine Liste konvertieren!)

Wie kann ich das in JavaScript machen?

+0

Will hast du negative Zahlen? – apsillers

Antwort

7

Sie könnten 0.1 hinzufügen und Math.floor verwenden.

function round(v) { 
 
    return Math.floor(v + 0.1); 
 
} 
 

 
var array = [ 
 
     18.25478, // => 18 
 
     18.7545, // => 18 
 
     18.90, // => 19 
 
     18.95, // => 19 
 
    ]; 
 
    
 
console.log(array.map(round));

0

Sie diese Funktion nutzen zu können:

function customRound(x) { 
    if (x - Math.floor(x) >= 0.9) { 
    return Math.ceil(x); 
    } else { 
    return Math.floor(x); 
    } 
} 
0

Wenn Sie für eine allgemeine Antwort, die Ihre benutzerdefinierte Schwelle als Eingabe verwendet, wird diese Funktion Ihre Bedürfnisse besser . Es verwendet auch Math.round(), wenn Sie über Math.ceil() und Math.floor() besorgt sind. Es behandelt auch negative Zahlen. Sie können hier mit ihm hantieren: https://jsfiddle.net/f0vt7ofw/

function customRound(num, threshold) { 
    if (num >= 0) { 
     return Math.round(num - (threshold - 0.5)); 
    } 
    else { 
     return Math.round(num + (threshold - 0.5)); 
    } 
} 

Beispiele:

customRound(18.7545, 0.9) => 18 
customRound(18.9, 0.9) => 19 
0

Das Folgende ist eine flexible Funktion, die

function roundWithThreshold(threshold, num) { 
    return Math[ num % 1 > threshold ? 'ceil' : 'floor' ](num); 
} 

Verwendung für eine veränderbare Schwelle ermöglicht:

roundWithThreshold(0.2, 4.4);