voglio convertire tutti i numeri con un'approssimazione di 0,25rotonda al più vicino .25 javascript
Quindi ...
5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50
Grazie
voglio convertire tutti i numeri con un'approssimazione di 0,25rotonda al più vicino .25 javascript
Quindi ...
5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50
Grazie
Ecco un'implementazione di quello che rslite detto:
var number = 5.12345;
number = (Math.round(number * 4)/4).toFixed(2);
Moltiplicare per 4, rotonda a intero, dividere per 4 e formato con due decimali.
Modifica Qualsiasi motivo per i downvotes? Almeno lascia un commento per sapere cosa dovrebbe essere migliorato.
Se la velocità è la vostra preoccupazione, si noti che è possibile ottenere un miglioramento della velocità del 30% utilizzando:
var nearest = 4;
var rounded = number + nearest/2 - (number+nearest/2) % nearest;
Dal mio sito web: http://phrogz.net/round-to-nearest-via-modulus-division
Test di prestazioni qui: http://jsperf.com/round-to-nearest
Ottima risposta ... Passa a questo se hai numeri negativi. var arrotondato = numero + più vicino/2 - Math.abs ((numero + più vicino/2)% più vicino); – Lenny
@Lenny Ma nota che quando lo fai, stai invocando una chiamata di funzione ('Math.abs') e quindi perderai il vantaggio di velocità. – Phrogz
Un'ottima approssimazione per ro INANZIAMENTO:
function Rounding (number, precision){
var newNumber;
var sNumber = number.toString();
var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;
if (number < 0)
newNumber = (number - 5 * Math.pow(10,-increase));
else
newNumber = (number + 5 * Math.pow(10,-increase));
var multiple = Math.pow(10,precision);
return Math.round(newNumber * multiple)/multiple;
}
Com'è meglio delle altre risposte? Gli altri sembrano molto più brevi. (Potrei analizzare il codice per cercare di capire quale vantaggio ha, ma è più veloce chiedere.^_ ^) – Venryx
Ecco @ risposta di Gumbo in una forma di una funzione:
var roundNearQtr = function(number) {
return (Math.round(number * 4)/4).toFixed(2);
};
È ora possibile effettuare chiamate:
roundNearQtr(5.12345); // 5.00
roundNearQtr(3.23); // 3.25
roundNearQtr(3.13); // 3.25
roundNearQtr(3.1247); // 3.00
Ecco una funzione generica di fare l'arrotondamento. Negli esempi precedenti, è stato utilizzato 4 perché è nell'inverso di 0,25. Questa funzione consente all'utente di ignorare quel dettaglio. Al momento non supporta la precisione preimpostata, ma può essere facilmente aggiunta.
function roundToNearest(numToRound, numToRoundTo) {
numToRoundTo = 1/(numToRoundTo);
return Math.round(numToRound * numToRoundTo)/numToRoundTo;
}
Ciò richiede un'operazione extra di 'Math.round (num/multiple) * multiple;'. * Tuttavia *, è la mia versione preferita per un motivo principale: non fornisce risultati come "0.3000000000000004" per 'Round (.2 + .1, .1)'. – Venryx
Usa sotto la funzione, speriamo vi sia utile
function roundByQuarter(value) {
var inv = 1.0/0.25;
return Math.round(value * inv)/inv;
}
Chiamare la funzione come sotto, si tradurrà il valore quartiere più vicino, cioè esso non tornerà .32, .89, .56 ma sarà restituire solo decimali .25, .75, .50.
roundByQuarter(2.74) = 2.75
roundByQuarter(2.34) = 2.25
roundByQuarter(2.94) = 3.00
roundByQuarter(2.24) = 2.25
function roundToInc(num, inc) {
const diff = num % inc;
return diff>inc/2?(num-diff+inc):num-diff;
}
> roundToInc(233223.2342343, 0.01)
233223.23
> roundToInc(505, 5)
505
> roundToInc(507, 5)
505
> roundToInc(508, 5)
510
Nessun tentativo da parte vostra? – random
Questa domanda non sembra avere alcun senso. Tutti i tuoi numeri stanno diventando se stessi, non viene fatto alcun arrotondamento. – Barmar