Gestió de problemes decimals a les funcions de JavaScript
Quan s'escriuen funcions de JavaScript, és habitual trobar problemes relacionats amb els nombres decimals, especialment quan es realitzen operacions de divisió. Per als desenvolupadors que necessiten un nombre net i sencer com a sortida, entendre com gestionar aquests resultats decimals és essencial.
En aquesta guia, explorarem com modificar una funció JavaScript per assegurar-nos que el valor de retorn sigui un nombre enter, independentment de si el càlcul inicial implica decimals. Aquest és un repte que molts principiants s'enfronten quan treballen amb funcions que impliquen càlculs, com ara la determinació de proporcions o mitjanes.
El problema sovint prové de dividir nombres que no produeixen un resultat de nombre sencer. Per exemple, calcular la mitjana d'alumnes per educador pot retornar un decimal, cosa que pot no ser desitjada en alguns contextos. Eliminar o arrodonir aquests decimals és una tasca habitual per millorar la llegibilitat i la usabilitat de la sortida.
Passarem pel procés de com utilitzar les funcions matemàtiques integrades de JavaScript, com ara Math.round(), Math.floor(), i Math.ceil(), per eliminar decimals i retornar un nombre sencer. Al final d'això, entendràs com formatar el retorn de la funció per satisfer les teves necessitats específiques.
Comandament | Exemple d'ús |
---|---|
Math.round() | Aquesta ordre arrodoneix un nombre decimal al nombre sencer més proper. És útil quan necessiteu que el resultat d'una divisió sigui un nombre enter en lloc d'un nombre de coma flotant. En el nostre exemple, Math.round(13.666) retorna 14. |
Math.floor() | Arrodoneix un nombre decimal a l'enter més proper, encara que la part decimal sigui superior a 0,5. A Math.floor(13.666), el resultat seria 13, descartant efectivament la part decimal. |
Math.ceil() | Aquesta ordre arrodoneix un nombre decimal al següent nombre sencer, independentment de la seva part decimal. Per exemple, Math.ceil(13.1) dóna com a resultat 14. |
assert.strictEqual() | S'utilitza a Node.js, aquest mètode comprova si dos valors són estrictament iguals. Sovint s'utilitza en proves unitàries per verificar si una funció retorna el resultat esperat. Al nostre script, assert.strictEqual(studentsPerAdmin(41,1,2), 14) comprova si la funció retorna 14 quan es crida amb aquests arguments. |
console.log() | Aquesta és una eina de depuració que imprimeix missatges o valors a la consola del navegador. És especialment útil per mostrar missatges dinàmics com console.log('Desafortunadament aquesta classe...') per comunicar els resultats de les funcions als usuaris. |
requerir () | Aquesta ordre s'utilitza a Node.js per importar mòduls o biblioteques. En el nostre cas, const assert = require('assert'); s'utilitza per incloure el integrat afirmar mòdul per a la realització de proves unitàries. |
Literals de plantilla | Els literals de plantilla, tancats per backticks (`), permeten incrustar expressions dins de cadenes. A la nostra funció, "Hi ha ${average} estudiants de mitjana" insereix dinàmicament el valor mitjà a la cadena. |
Operador de divisió (/) | Aquest operador divideix un nombre per un altre. En alumnes / (professors + ajudants), el nombre d'alumnes es divideix per la suma de professors i ajudants per calcular el nombre mitjà d'alumnes per educador. |
Entendre els mètodes de JavaScript per eliminar decimals
Quan es tracta de funcions JavaScript que retornen decimals, com en el estudiantsPerAdmin funció, és essencial entendre com modificar els resultats per obtenir nombres enters. En aquesta funció, el nombre mitjà d'alumnes per educador es calcula dividint el nombre d'alumnes per la suma de professors i ajudants. Tanmateix, com que la divisió sovint dóna lloc a valors decimals, es necessiten diversos mètodes matemàtics per gestionar aquests resultats. El repte és arrodonir o truncar la part decimal per adaptar-la al context on només és útil un nombre sencer, com per exemple per informar de quants alumnes s'assignen per professor.
El primer enfocament utilitzat en l'exemple és Math.round(). Aquest mètode arrodoneix el nombre decimal al nombre enter més proper. Per exemple, si la mitjana és de 13,666, matemàtiques.rodona retornarà 14 perquè el decimal és més gran que 0,5. Aquest mètode és útil en els casos en què voleu mantenir la precisió alhora que simplifiqueu el nombre. Un altre enfocament és Math.floor(), que sempre arrodoneix el nombre cap avall. S'aplica quan voleu descartar completament la part decimal, com ara retornar 13 en el mateix exemple, independentment del valor decimal.
D'altra banda, Math.ceil() serveix al propòsit contrari de Math.floor(), arrodonint sempre el nombre al nombre sencer més proper. Aquest mètode és ideal quan voleu assegurar-vos que el valor mai sigui inferior a la part sencera. Per exemple, si la mitjana és de 13,1, Math.ceil() tornarà 14, encara que la part decimal sigui força petita. Aquests mètodes permeten flexibilitat en funció de les necessitats específiques del vostre càlcul. Tant si l'objectiu és arrodonir al més proper, arrodonir cap avall o arrodonir cap amunt, cada funció té un propòsit diferent.
A més, l'ús de assert.strictEqual() en les proves unitàries assegura que les funcions es comporten com s'esperava. Aquesta ordre és important per comprovar si la sortida de la funció coincideix amb el resultat previst en diversos casos de prova. Actua com a salvaguarda, permetent als desenvolupadors verificar ràpidament si els seus canvis trenquen la funcionalitat o no. Combinat amb requerir () per importar els mòduls necessaris, aquestes proves afegeixen una capa addicional de validació, assegurant la fiabilitat del codi en entorns de producció. En incorporar aquestes tècniques, el codi no només és precís, sinó que també es prova a fons i està preparat per a diferents escenaris d'ús.
Múltiples enfocaments per eliminar decimals d'un retorn de funció JavaScript
Ús de JavaScript amb la implementació de front-end
// Solution 1: Using Math.round() to round to the nearest integer
function studentsPerAdmin(students, teachers, helpers) {
const average = students / (teachers + helpers);
const roundedAverage = Math.round(average);
if (roundedAverage > 10) {
console.log(`There are on average ${roundedAverage} students for each educator.`);
} else {
console.log('Unfortunately this class will be cancelled due to not having enough students enrolled.');
}
return roundedAverage;
}
studentsPerAdmin(41, 1, 2); // Result: 14 students for each educator
Maneig de decimals de diferents maneres utilitzant JavaScript
Ús de JavaScript amb diversos mètodes matemàtics
// Solution 2: Using Math.floor() to always round down
function studentsPerAdmin(students, teachers, helpers) {
const average = students / (teachers + helpers);
const flooredAverage = Math.floor(average);
if (flooredAverage > 10) {
console.log(`There are on average ${flooredAverage} students for each educator.`);
} else {
console.log('Unfortunately this class will be cancelled due to not having enough students enrolled.');
}
return flooredAverage;
}
studentsPerAdmin(41, 1, 2); // Result: 13 students for each educator
Garantir el retorn de nombres sencers a la funció JavaScript
Utilitzant JavaScript i Math.ceil() per arrodonir cap amunt
// Solution 3: Using Math.ceil() to always round up
function studentsPerAdmin(students, teachers, helpers) {
const average = students / (teachers + helpers);
const ceiledAverage = Math.ceil(average);
if (ceiledAverage > 10) {
console.log(`There are on average ${ceiledAverage} students for each educator.`);
} else {
console.log('Unfortunately this class will be cancelled due to not having enough students enrolled.');
}
return ceiledAverage;
}
studentsPerAdmin(41, 1, 2); // Result: 14 students for each educator
Script de prova per comprovar la validesa en diferents entorns
Proves unitàries per a la validació del back-end a Node.js
// Unit Test for verifying all solutions
const assert = require('assert');
assert.strictEqual(studentsPerAdmin(41, 1, 2), 14); // Using Math.round()
assert.strictEqual(studentsPerAdmin(30, 1, 2), 10); // Using Math.floor()
assert.strictEqual(studentsPerAdmin(35, 1, 2), 12); // Using Math.ceil()
console.log('All tests passed!');
Maneig de decimals en escenaris complexos de JavaScript
Tot i que arrodonir decimals és una necessitat habitual a JavaScript, hi ha altres escenaris en què la gestió de decimals requereix més control. Una de les tècniques més importants és treballar a Fixat(). Aquest mètode us permet especificar quantes posicions decimals voleu, arrodonint el nombre al valor més proper alhora que garanteix un format de visualització coherent. Per exemple, number.toFixed(2) sempre retornarà un nombre amb dos decimals, el que el fa ideal per a situacions en què la precisió és important, com ara càlculs de moneda o mesures científiques.
Un altre concepte important és com JavaScript gestiona l'aritmètica de coma flotant. A causa de la forma en què els números s'emmagatzemen a la memòria, les operacions amb decimals de vegades poden donar lloc a resultats inesperats, especialment quan es comparen dos nombres de coma flotant. Per exemple, 0.1 + 0.2 no és exactament igual 0.3 en JavaScript, que pot causar problemes en determinats càlculs. Comprendre aquests matisos us pot ajudar a evitar errors al vostre codi, especialment quan tracteu càlculs financers o estadístics.
A més, si necessiteu eliminar els decimals completament sense arrodonir, podeu utilitzar operadors per bits com ara ~~ (doble tilde), que trunca efectivament la part decimal d'un nombre. Aquest enfocament funciona perquè els operadors per bit converteixen el nombre en un enter en el procés. Per exemple, ~~13.666 resulta en ~~13.99. Aquest mètode s'utilitza menys, però proporciona una manera ràpida d'aconseguir l'objectiu de truncar decimals quan el rendiment és crucial.
Preguntes habituals sobre la gestió de decimals en JavaScript
- Com arrodoneixo un nombre a l'enter més proper en JavaScript?
- Podeu utilitzar Math.round() per arrodonir un nombre a l'enter més proper. Per exemple, Math.round(13.6) torna 13.
- Com arrodoneixo sempre un decimal a JavaScript?
- Per arrodonir sempre per baix, podeu utilitzar Math.floor(). Per exemple, Math.floor(13.9) tornarà ~~13.99, ignorant la part decimal.
- Quina és la millor manera d'eliminar decimals sense arrodonir?
- Utilitzant l'operador bit a bit ~~ és una manera eficient d'eliminar decimals sense arrodonir. Per exemple, 13 resulta en ~~13.99.
- Puc controlar el nombre de decimals a JavaScript?
- Sí, pots utilitzar toFixed() per especificar quants decimals voleu. Per exemple, 13.666.toFixed(2) tornarà 13.67.
- Per què ho fa 0.1 + 0.2 no igual 0.3 en JavaScript?
- Això es deu a com JavaScript gestiona l'aritmètica de coma flotant. Els números s'emmagatzemen d'una manera que de vegades condueix a petits errors de precisió.
Consideracions finals sobre la gestió de decimals en JavaScript
Quan es treballa amb JavaScript, tractar amb decimals de vegades pot provocar confusió, especialment en funcions que requereixen resultats de nombres sencers. Utilitzant funcions d'arrodoniment com ara Math.round(), o truncar decimals mitjançant operadors per bits, proporciona als desenvolupadors eines flexibles per resoldre aquest problema de manera eficient.
En dominar aquests mètodes de JavaScript, podreu controlar com es mostren els valors numèrics i assegurar-vos que les vostres funcions retornin resultats clars i precisos. Ja sigui arrodonint cap amunt, cap avall o truncant, l'elecció del mètode adequat garanteix que el vostre codi sigui precís i llegible.
Fonts i referències
- Aprofundeix en l'ús de Funcions matemàtiques de JavaScript com Math.round(), Math.floor(), i Math.ceil() per arrodonir decimals en JavaScript. MDN Web Docs - JavaScript Math
- Referència utilitzada per explicar el comportament de aritmètica de coma flotant en JavaScript i per què la precisió decimal és important en alguns càlculs. Guia de coma flotant
- Descriu l'ús d'operadors bit a bit per truncar valors decimals sense arrodonir en JavaScript. JavaScript.info - Operadors de bits