Redondo al siguiente número entero javascript -- javascript campo con math campo con rounding camp Relacionados El problema

Round to the next whole number javascript


2
vote

problema

Español

Quiero lograr algo como esto en JavaScript:

  input = 2455.55 f(input) = 2456 f(input) = 2460 f(input) = 2500 f(input) = 3000 f(input) = 2455.55   

Estoy usando el método Math.round()2 por ahora, pero solo llega a 2.546 con él. Preguntándome si hay una mejor manera de lograr el resto.

Original en ingles

I want to achieve something like this in JavaScript:

input = 2455.55 f(input) = 2456 f(input) = 2460 f(input) = 2500 f(input) = 3000 f(input) = 2455.55 

I am using the Math.round() method for now but only get to 2,546 with it. Wondering if there is a best way to achieve the rest.

        
     
     

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Según la salida deseada, parece que necesita rastrear el número de llamadas de función. Esto no parece ser un argumento a su función.

Dada la restricción de que solo tiene un solo argumento, es probable que la implementación sea como

  SELECT   A.id AS `A_id`,   B.id AS `B_id`,   COALESCE(C.id, 0) AS `C_id`,   COALESCE(     (SELECT D.id FROM D WHERE D.fk_b = B.id LIMIT 1), 0   ) AS `D_id` FROM B INNER JOIN A ON (B.fk_a = A.id) LEFT JOIN C ON (B.id = C.fk_b); 111  
 

Based on your desired output it looks like you need to track the number of function calls. This doesn't seem to be an argument to your function.

Given the constraint that you have only a single argument, the implementation looks probably like

var lastNum = 0 var digitsToRound = 0  function roundUp(input) {   // Verify whether the function is called with the same argument as last call.   // Note that we cannot compare floating point numbers.   // See https://dev.to/alldanielscott/how-to-compare-numbers-correctly-in-javascript-1l4i   if (Math.abs(input - lastNum) < Number.EPSILON) {     // If the number of digitsToRound exceeds the number of digits in the input we want     // to reset the number of digitsToRound. Otherwise we increase the digitsToRound.     if (digitsToRound > (Math.log10(input) - 1)) {       digitsToRound = 0;     } else {       digitsToRound = digitsToRound + 1;     }   } else {     // The function was called with a new input, we reset the digitsToRound     digitsToRound = 0;     lastNum = input;   }    // Compute the factor by which we need to divide and multiply to round the input   // as desired.   var factor = Math.max(1, Math.pow(10, digitsToRound));   return Math.ceil(input / factor) * factor; }   console.log(roundUp(2455.55)); // 2456 console.log(roundUp(2455.55)); // 2460 console.log(roundUp(2455.55)); // 2500 console.log(roundUp(2455.55)); // 3000 
 
 
3
 
vote

Puede dividir su número en diez hasta que obtenga un número no entero, redondo y luego multiplique por diez nuevamente la misma cantidad de tiempo. Algo así:

  SELECT   A.id AS `A_id`,   B.id AS `B_id`,   COALESCE(C.id, 0) AS `C_id`,   COALESCE(     (SELECT D.id FROM D WHERE D.fk_b = B.id LIMIT 1), 0   ) AS `D_id` FROM B INNER JOIN A ON (B.fk_a = A.id) LEFT JOIN C ON (B.id = C.fk_b); 2  
 

You can divide your number by ten until you get a non-integer, round it up and then multiply by ten again the same amount of time. Something like this:

    function roundUp(n) {                var n2 = n;          var i=0;          while (Number.isInteger(n2)) {             n2 /= 10;              i++;          }          return Math.round(n2) * Math.pow(10, i);            }        console.log(roundUp(2455.55)); // 2456      console.log(roundUp(2456)); // 2460      console.log(roundUp(2460)); // 2500      console.log(roundUp(2500)); // 3000
 
 
0
 
vote

gracias, agradable uno! Inspirado por su respuesta, lo resolví así:

  SELECT   A.id AS `A_id`,   B.id AS `B_id`,   COALESCE(C.id, 0) AS `C_id`,   COALESCE(     (SELECT D.id FROM D WHERE D.fk_b = B.id LIMIT 1), 0   ) AS `D_id` FROM B INNER JOIN A ON (B.fk_a = A.id) LEFT JOIN C ON (B.id = C.fk_b); 3  
 

thanks, nice one! Inspired by your answer, I solved it like so:

function roundNumber(num, n) {   const divider = Math.pow(10, n);   return Math.round(num / divider) * divider; }; 
 
 

Relacionados problema

5  ¿Aritméticos decimales en C o C ++?  ( Decimal arithmetics in c or c ) 
La norma IEEE-754 define los aritméticos decimales para evitar errores de redondeo al usar los números de puntos de flotación de la base de diez (ver, por eje...

0  Los métodos de Java determinan cuántas veces a la salida se basan en los parámetros  ( Java methods determine how many times to output char based off of paramaters ) 
He hecho algunas buscando y no puedo determinar cómo hacer lo que estoy buscando. Tengo un método para el redondeo de números que toma la Paramaters numberT...

0  Redondeando cualquier celda con números usando VBA  ( Rounding off any cell with numbers using vba ) 
Tengo un conjunto no fijo de datos que pueden variar en filas y columnas. Tengo la intención de usar VBA para buscar en todo el conjunto de datos y redondea...

2  MySQL descartar LSB de la parte decimal de flotador si es cero  ( Mysql discard lsb of decimal part of float if it is zero ) 
Tengo un campo flotante MySQL X. Si inserto un valor de la secuencia de comandos PHP 21.10 se guarda como 21.1 .Prut My System Trate 21.10 y 21.1 son ...

14  Fecha redonda a 10 minutos intervalo  ( Round date to 10 minutes interval ) 
Tengo una columna $('#emp').attr('onblur',"func2('abc','def')") 1 que quiero redondear al siguiente intervalo inferior de 10 minutos en una consulta (consul...

5  ¿Cómo escribir un prototipo para number.tofixed en JavaScript?  ( How to write a prototype for number tofixed in javascript ) 
Necesito redondear números decimales a seis lugares usando JavaScript, pero necesito considerar los navegadores heredados, así que puede 'T confirmar en núme...

1  ¿Valores largos de "redondeo" angular / javascript?  ( Angular javascript rounding long values ) 
Tengo el siguiente JSON: [{"hashcode": 4830991188237466859},{...}] Tengo el siguiente código angular / js: var res = $resource('<something>'); ... r...

2  Parte fraccional de la pregunta numérica  ( Fractional part of the number question ) 
¿Qué es un buen algoritmo para determinar la fracción necesaria necesaria para agregar / SUB al número para redondearlo al entero más cercano sin usar los fun...

512  Redondea un doble a 2 lugares decimales [duplicado]  ( Round a double to 2 decimal places ) 
Esta pregunta ya tiene respuestas aquí : Cómo redondear un número a n decimales en Java < / a> ...

5  ¿Cómo redondeo los números hasta una precisión dinámica en Ruby en los rieles?  ( How do i round numbers up to a dynamic precision in ruby on rails ) 
Quiero redondear números hasta su orden de magnitud más cercano. (Creo que dije este derecho) Aquí hay algunos ejemplos: Input => Output 8 => 10 34 => 4...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos