Quiero dividir 1000/3 como ejemplo y establecer la respuesta en una entrada. mi problema es que no quiero que float , así que redondeé así
const answer = Math.round(1000/3);Cuando los configuro en 3 entradas, todos son 333 y la respuesta de su suma es 999, pero quiero que uno de ellos sea 334 y los otros 333. ¿Cómo puedo manejar eso en general? Gracias por tu ayuda
quiero que uno de ellos sea 334 y los otros 333
Simplemente agregue uno a 1000 para ser 1001 entonces:
let s1 = Math.round(1000/3); //333 let s2 = Math.round(1000/3); //333 let s3 = Math.round(1000/3); //333 console.log(s1+s2+s3); //999 let s4 = Math.round(1001/3); //334 console.log(s2+s3+s4); //1000Aquí hay una función genérica que dividirá su entero k en n partes cuya suma es k :
const arr = [] , splitInteger = (num, parts) => { let sum = 0; for (let i = 0; i < parts - 1; i++) { const curr = Math.floor(num/parts) arr.push(curr) sum += curr } arr.push(num - sum) } // Splitting 1000 into 3 parts splitInteger(1000, 3) console.log(arr) // Let's try 7 parts arr.length = 0 splitInteger(1000, 7) console.log(arr)quiero que uno de ellos sea 334 y los otros 333, ¿cómo puedo manejar eso en general?
¿Qué tan generales? No estoy seguro de que haya una respuesta perfecta. Sin embargo, según su ejemplo, usaría algo como lo siguiente:
var input = 1000 var divisors = 3 var value = Math.round(input/divisors) var display1 = value var display2 = value var display3 = input - value * (divisors-1) console.log( display1, display2, display3 )En ciertas circunstancias, es posible que deba tener más cuidado con el redondeo, pero para rangos de números enteros de 0 a 100, esto debería estar bien.