Des arrondis précis (JavaScript)
CrazyCat » 07/ 03/2009 14:26
JavaScript
|
Envoyer à un ami |
Fil des commentaires de ce billet
Pour faire le pendant en JavaScript du post "Des arrondis précis", j'ai traduit mes fonctions.
Je me suis appuyé sur deux fonctions de php.js pour les vérifications, elles sont inclues dans ma source.
Voici donc la source, vous pourrez constater qu'elle est très proche de celle de la version PHP. Je n'ai pas poussé le vice jusqu'à utiliser la fonction abs() de Kevin.
function intval( mixed_var, base ) { // http://kevin.vanzonneveld.net // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: stensi // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // * example 1: intval('Kevin van Zonneveld'); // * returns 1: 0 // * example 2: intval(4.2); // * returns 2: 4 // * example 3: intval(42, 8); // * returns 3: 42 // * example 4: intval('09'); // * returns 4: 9 var tmp; var type = typeof( mixed_var ); if(type == 'boolean'){ if (mixed_var == true) { return 1; } else { return 0; } } else if(type == 'string'){ tmp = parseInt(mixed_var * 1); if(isNaN(tmp) || !isFinite(tmp)){ return 0; } else{ return tmp.toString(base || 10); } } else if(type == 'number' && isFinite(mixed_var) ){ return Math.floor(mixed_var); } else{ return 0; } } function floatval(mixed_var) { // + original by: Michael White (http://getsprink.com) // % note 1: The native parseFloat() method of JavaScript returns NaN when it encounters a string before an int or float value. // * example 1: floatval('150.03_page-section'); // * returns 1: 150.03 // * example 2: floatval('page: 3'); // * returns 2: 0 // * example 2: floatval('-50 + 8'); // * returns 2: -50 return (parseFloat(mixed_var) || 0); } /** * Arrondit à la précision supérieure * @param float value Valeur à arrondir * @param float precision Précision (défaut: 1) * @return float */ function ceilp(value, precision) { precision = Math.abs(intval(precision)); value = floatval(value); if (precision==1)||(precision==0)) { value = ceil(value); } else { value ceil(value/precision)*precision; } return value; } /** * Arrondit à la précision inférieure * @param float value Valeur à arrondir * @param float precision Précision (défaut: 1) * @return float */ function floorp(value, precision) { precision = Math.abs(intval(precision)); value = floatval(value); if ((precision==1)||(precision==0)) { value = floor(value); } else { value floor(value/precision)*precision; } return value; }
Commentaires
Le 23/ 06/2009 14:02
Merci CrazyCat.
Chez moi, ce script fonctionne sous javascript via les quelques modifications suivantes :
function ceilp(value, precision) {
var decimales=1; if (isNaN(precision) || precision=='') precision=1; precision = Math.abs(intval(precision)); for(i=1; i<=precision; i++){ decimales=decimales*10; } value = floatval(value); if (precision<=1) { value = Math.ceil(value); } else { value = Math.ceil(value*decimales)/decimales; } return value;}
function floorp(value, precision) {
var decimales=1; if (isNaN(precision) || precision=='') precision=1; precision = Math.abs(intval(precision)); for(i=1; i<=precision; i++){ decimales=decimales*10; } value = floatval(value); if (precision<=1) { value = Math.floor(value); } else { value = Math.floor(value*decimales)/decimales; } return value;}